Странное поведение ComboBox - WPF - PullRequest
       11

Странное поведение ComboBox - WPF

1 голос
/ 22 сентября 2010

У меня есть следующий пользовательский элемент управления:

Ресурсы:

    <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(), вот что происходит с элементами, когда я нажимаю на кнопку:

Нежелательные результаты http://img827.imageshack.us/img827/1561/whyowhy.png

Я в полной растерянности относительно того, почему это происходит, я проверил визуальное дерево, все там, где оно должно быть. Я сбит с толку. Кто-нибудь испытывал такое странное поведение? Почему мои элементы имеют 0,0 на моем рабочем столе, а не прикреплены к списку?

1 Ответ

1 голос
/ 22 сентября 2010

Я быстро закодировал это. Не было никаких проблем.

<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, который позволяет группировать, фильтровать, управлять курсором и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...