WPF Видимость элемента пользовательского интерфейса на основе комбинированного выбора - PullRequest
11 голосов
/ 01 апреля 2010

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

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

Ответы [ 2 ]

26 голосов
/ 01 апреля 2010

Здесь есть две проблемы. Сначала видимость по умолчанию должна быть указана в стиле. Но даже с этим это не будет работать, потому что привязка к триггеру сравнивает 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>
10 голосов
/ 26 мая 2011

«Чистым» решением будет

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...