如何讓ListBox,Canvas和Thumb一起工作?如何讓ListBox,Canvas和Thumb一起工作?
我正在嘗試重用列表框的選擇邏輯與包含可拖動的拇指的畫布。
不幸的是,Thumb似乎處理了鼠標事件,因此單擊Thumb時不會選中該項目。
我希望這些元素可以一起工作,而不訴諸程序代碼中的解決方法。如果有人知道這是可能的還是怎麼做的,請告訴我。
代碼示例如下。
在XAML我定義列表框,並指定一個Canvas作爲ItemsPanel:
<Window x:Class="ListBoxCanvasThumb.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
Loaded="Window_Loaded"
>
<Grid>
<ListBox
x:Name="listBox"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</Window>
在Loaded事件處理程序創建一個可拖動的拇指,在ListBoxItem中把它包起來,設置畫布的當前位置和然後將其添加到列表框:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Thumb t = new Thumb();
t.Width = 10;
t.Height = 10;
t.DragDelta += new DragDeltaEventHandler(thumb_DragDelta);
ListBoxItem i = new ListBoxItem();
Canvas.SetLeft(i, 10);
Canvas.SetTop(i, 10);
i.Content = t;
listBox.Items.Add(i);
}
在DragDelta事件處理我更新的項目在畫布中的位置:
void thumb_DragDelta(object sender, DragDeltaEventArgs e)
{
ListBoxItem i = (ListBoxItem)((Thumb)sender).Parent;
Canvas.SetLeft(i, Canvas.GetLeft(i) + e.HorizontalChange);
Canvas.SetTop(i, Canvas.GetTop(i) + e.VerticalChange);
}
這對我不起作用。仍然吞下點擊並且列表框不會被選中。你能修復它@AshleyDavis? – Carlo 2014-04-30 00:54:31