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
。我还把所有的绑定移到了组合框本身,我仍然遇到这个问题。