奇怪的ComboBox行为 - WPF

时间:2010-09-22 00:43:40

标签: c# .net wpf combobox

我有以下用户控制:

资源:

    <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>

它位于<Window>内并使用.ShowDialog()打开,这是当我点击按钮时项目会发生的情况:

Undesirable Results http://img827.imageshack.us/img827/1561/whyowhy.png

我完全失去了为什么会这样,我检查了视觉树,一切都应该在哪里。我很困惑。那里有人经历过这样的奇怪行为吗?为什么我的桌面上的项目为0,0而不是连接到我的组合框?

1 个答案:

答案 0 :(得分:1)

我很快就对此进行了编码。没有任何问题。

<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>

另外,我从未见过任何人将ItemSourceSelectedItem置于一种风格中。我不认为这是一个很好的WPF练习。我宁愿绑定到ICollectionView,它允许分组,过滤,管理游标等