【问题标题】:Strange ComboBox Behaviour - WPF奇怪的组合框行为 - WPF
【发布时间】:2010-09-22 00:43:40
【问题描述】:

我有以下用户控件:

资源:

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

它在&lt;Window&gt; 内并使用.ShowDialog() 打开,当我单击按钮时,这些项目会发生这种情况:

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

我完全不知道为什么会发生这种情况,我检查了可视化树,一切都在它应该在的地方。我很困惑。有没有人经历过这样的奇怪行为?为什么我的项目在我的桌面上位于 0,0 而不是附加到我的组合框?

【问题讨论】:

    标签: c# .net wpf combobox


    【解决方案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

    【讨论】:

    • 之所以采用这种风格是因为几个组合框需要完全相同的设置,这是为了减少 XAML 重复。
    • 丹姆,无法编辑我之前的评论。另外:它绑定到ICollectionView,datacontext 上的FiltersICollectionView 类型。我也只是将所有绑定移到 ComboBox 本身上,但我仍然遇到这个问题。
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2015-01-14
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多