C# 奇怪的组合框行为-WPF
我有以下用户控件: 资源:C# 奇怪的组合框行为-WPF,c#,.net,wpf,combobox,C#,.net,Wpf,Combobox,我有以下用户控件: 资源: <DataTemplate x:Key="FilterComboDataTemplate"> <Label Content="{Binding Item2}" /> </DataTemplate> <Style x:Key="FilterSelectorStyle" TargetType="ComboBox"> <Setter Property="Items
<DataTemplate x:Key="FilterComboDataTemplate">
<Label Content="{Binding Item2}" />
</DataTemplate>
<Style x:Key="FilterSelectorStyle" TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Filters}" />
<Setter Property="SelectedItem" Value="{Binding SelectedFilter}" />
<Setter Property="ItemTemplate" Value="{StaticResource FilterComboDataTemplate}" />
</Style>
<DockPanel>
<Label DockPanel.Dock="Top">
Select your filter/value to apply:
</Label>
<ComboBox Style="{StaticResource FilterSelectorStyle}" />
<StackPanel>
<!-- TODO: Fix Combobox First -->
</StackPanel>
</DockPanel>
控制主体:
<DataTemplate x:Key="FilterComboDataTemplate">
<Label Content="{Binding Item2}" />
</DataTemplate>
<Style x:Key="FilterSelectorStyle" TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Filters}" />
<Setter Property="SelectedItem" Value="{Binding SelectedFilter}" />
<Setter Property="ItemTemplate" Value="{StaticResource FilterComboDataTemplate}" />
</Style>
<DockPanel>
<Label DockPanel.Dock="Top">
Select your filter/value to apply:
</Label>
<ComboBox Style="{StaticResource FilterSelectorStyle}" />
<StackPanel>
<!-- TODO: Fix Combobox First -->
</StackPanel>
</DockPanel>
选择要应用的筛选器/值:
它位于一个
内,并使用.ShowDialog()
打开,单击按钮时项目会发生以下情况:
我完全不知道为什么会发生这种情况,我检查了视觉树,一切都在它应该在的地方。我很困惑。有没有人经历过这种奇怪的行为?为什么我的项目0,0在我的桌面上,而不是附加到我的组合框上?我很快就编写了这个代码。没有任何问题
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:WpfApplication5="clr-namespace:WpfApplication5" x:Class="WpfApplication5.MainWindow"
x:Name="MyWindow"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="FilterComboDataTemplate">
<Label Content="{Binding Item2}" />
</DataTemplate>
</Window.Resources>
<DockPanel>
<Label DockPanel.Dock="Top">
Select your filter/value to apply:
</Label>
<ComboBox Height="32" ItemsSource="{Binding Filters, ElementName=MyWindow}" ItemTemplate="{DynamicResource FilterComboDataTemplate}"/>
<StackPanel>
<!-- TODO: Fix Combobox First -->
</StackPanel>
</DockPanel>
</Window>
选择要应用的筛选器/值:
此外,我从未见过有人将
ItemSource
和SelectedItem
放在一个样式中。我认为这不是一个好的WPF实践。我宁愿绑定到一个ICollectionView,它允许分组、过滤、管理光标等。我很快编写了这个。没有任何问题
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:WpfApplication5="clr-namespace:WpfApplication5" x:Class="WpfApplication5.MainWindow"
x:Name="MyWindow"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="FilterComboDataTemplate">
<Label Content="{Binding Item2}" />
</DataTemplate>
</Window.Resources>
<DockPanel>
<Label DockPanel.Dock="Top">
Select your filter/value to apply:
</Label>
<ComboBox Height="32" ItemsSource="{Binding Filters, ElementName=MyWindow}" ItemTemplate="{DynamicResource FilterComboDataTemplate}"/>
<StackPanel>
<!-- TODO: Fix Combobox First -->
</StackPanel>
</DockPanel>
</Window>
选择要应用的筛选器/值:
此外,我从未见过有人将
ItemSource
和SelectedItem
放在一个样式中。我认为这不是一个好的WPF实践。我宁愿绑定到一个ICollectionView,它允许分组、过滤、管理光标等它的风格是因为两个组合框需要完全相同的设置,这是为了减少XAML重复。Danm,无法编辑我以前的评论。另外:它绑定到一个ICollectionView
,datacontext上的过滤器类型为ICollectionView
。我还将所有绑定移到了组合框本身,但我仍然遇到了这个问题。其风格的原因是两个组合框需要完全相同的设置,以减少XAML重复。Danm,无法编辑我以前的评论。另外:它绑定到一个ICollectionView
,datacontext上的过滤器类型为ICollectionView
。我还把所有的绑定移到了组合框本身,我仍然遇到这个问题。