Как я могу написать шаблон элемента для выбранного элемента в поле со списком в wpf - PullRequest
2 голосов
/ 14 июня 2011

Я создал шаблон элемента для поля со списком wpf для отображения нескольких свойств и объекта в элементе поля со списком.

<ComboBox x:Name="cmbType" Grid.Column="2" Grid.Row="0" Grid.ColumnSpan="1"
        SelectedItem="{Binding Current.Type, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEditable="False"
        ItemsSource="{Binding Types, Mode=OneWay}" DropDownClosed="cmbIncidentType_DropDownClosed" TabIndex="601">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="4" />
                    <ColumnDefinition Width="*" />

                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding ID}" />
                <TextBlock Grid.Column="2" Text="{Binding Name}" />
            </Grid>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

до сих пор его идеально отображалось как идентификатор и имя типа в элементе комбинированного окна, но теперь я хочу, чтобы при выборе элемента отображалось только имя выбранного элемента в текстовой области комбинированного блокавместо того, чтобы показывать имя и идентификатор.

Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 14 июня 2011

Вы можете использовать триггер, чтобы скрыть идентификатор в области отображения ComboBox:

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding ID}" Margin="0,0,4,0">
            <TextBlock.Style>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBoxItem}, Path=IsSelected}" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
        <TextBlock Text="{Binding Name}"/>
    </StackPanel>
</DataTemplate>
...