Подтвердить что ты не робот

WPF Видимость элемента пользовательского интерфейса, основанного на комбинированном выборе

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

    <ComboBox Name="comboMyCombo">
        <ComboBoxItem>Don't show the label</ComboBoxItem>
        <ComboBoxItem>Show the label</ComboBoxItem>
    </ComboBox>

    <Label Visibility="Collapsed">This is my label
        <Label.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger 
                            Binding="{Binding ElementName=comboMyCombo, Path=SelectedValue}" Value="Show the label">
                        <Setter Property="Label.Visibility" Value="Visible"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>
4b9b3361

Ответ 1

Здесь есть две проблемы. Сначала видимость по умолчанию должна быть указана в стиле. Но даже с этим он не будет работать, потому что привязка к триггеру сравнивает объект SelectedValue, объект ComboBoxItem со строковым объектом и никогда не будет эквивалентным. Чтобы упростить пример, я поместил соответствующие значения в свойства тега ComboBoxItem. Хотя фактическая реализация сравнения, скорее всего, будет зависеть от конкретных потребностей приложения.

    <ComboBox Name="comboMyCombo">
        <ComboBoxItem Tag="Hide">Don't show the label</ComboBoxItem>
        <ComboBoxItem Tag="Show">Show the label</ComboBoxItem>
    </ComboBox>

    <Label>This is my label
        <Label.Style>
            <Style>
                <Setter Property="Label.Visibility" Value="Collapsed"></Setter>
                <Style.Triggers>
                    <DataTrigger  
                        Binding="{Binding ElementName=comboMyCombo, Path=SelectedItem.Tag}" Value="Show">
                        <Setter Property="Label.Visibility" Value="Visible"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>

Ответ 2

"Чистое" решение будет

<ComboBox>
    <ComboBoxItem x:Name="iOne" Content="One"/>
    <ComboBoxItem x:Name="iTwo" Content="Two"/>
    <ComboBoxItem x:Name="iThree" Content="Three"/>
</ComboBox>

<Label Content="One is shown">
 <Label.Style>
    <Style TargetType="Label">
        <Setter Property="Visibility" Value="Hidden" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=iOne, Path=IsSelected}"    Value="True">
                <Setter Property="Visibility"  Value="Visible"/>
            </DataTrigger> 
        </Style.Triggers>
    </Style>
 </Label.Style>
</Label>