0
我正在嘗試使用其中的複選框實現組合框。我在Google/SO上找到的所有文章/資源都建議添加一個bool到我的業務對象。但我期待創建一個可重用的控件。 所以我創建了一個從組合框繼承的自定義控件,並使用itemcontrol改變了彈出框中的控件。 這是我的XAML(爲簡便起見將剛剛的XAML彈出)帶有複選框的Wpf組合框
<Popup Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
<Grid Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border x:Name="DropDownBorder" Background="{StaticResource BackgroundBrush}" BorderThickness="1" BorderBrush="{StaticResource BorderBrush}" />
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<ItemsControl ItemsSource="{Binding ItemsSource,RelativeSource={RelativeSource AncestorType=local:CheckedComboBox}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" x:Name="PART_Checkbox" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</Popup>
正如預期的那樣它顯示了複選框的組合框。但我無法弄清楚如何跟蹤檢查項目? 我正在考慮收聽選中的事件,但是當我嘗試在代碼隱藏中獲取複選框時,FindName返回null。
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (this.Template != null)
{
var v = Template.FindName("PART_Checkbox",this);
Debug.Assert(v != null);
}
}
謝謝。
完美!在我的xaml中使用listbox而不是itemscontrol,並像魅力一樣工作。謝謝 –