Wpf Combobox выбранный триггер - PullRequest
1 голос
/ 09 июня 2011

Я пытаюсь изменить видимость с помощью триггера, когда выбрано определенное значение в поле со списком, и я получил следующий XAML

 <ItemsControl ItemsSource="{Binding AccessControl.Credentials}" >
                        <ItemsControl.ItemTemplate>
                        <DataTemplate>                              
                            <Grid  >                                  

                             <ComboBox  Name="chkFieldType"                                          
                                        SelectedValue="{Binding Path=ValueSourceType,Converter={StaticResource enumstringConv}}"
                                        SelectedValuePath="Tag" SelectionChanged="chkFieldType_SelectionChanged" >
                                           <ComboBoxItem Tag="User">User</ComboBoxItem>                                     
                                           <ComboBoxItem Tag="SessionCredential">Field</ComboBoxItem>
                                           <ComboBoxItem Tag="Inherit">From other Resource</ComboBoxItem>
                             </ComboBox>


                                    <Border " Visibility="Hidden">
                                        <Border.Resources>
                                            <Style TargetType="{x:Type Border}">
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding Path=SelectedValue, ElementName=chkFieldType}" Value="Inherit">
                                                        <Setter Property="Visibility" Value="Visible" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Border.Resources>
                                        <ComboBox/>                                         
                                    </Border>

В этом случае граница.Выбранное значение равно «Inherit» типа string, но граница остается скрытой.

Ответы [ 6 ]

3 голосов
/ 08 октября 2013

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

<Border Visibility="Hidden">

Вы должны установить начальную видимость, используя стиль:

<Style TargetType="....">
   <Setter Property="Visibility" Value="Hidden"/>
   <Style.Triggers>
      ....
   </Style.Triggers>
</Style>

(я знаю, что это немного запоздало, но я подумал, может быть, кто-то ещеможет столкнуться с той же проблемой).

1 голос
/ 06 марта 2015

Попробуйте SelectedItem.Tag или SelectedItem.Content вместо SelectedValue

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

Установите привязку для SelectedValue, а не SelectedItem.SelectedValue. То, как у вас это есть, ищет ComboBoxItem.SelectedValue, которого не существует

<DataTrigger Value="Inherit" 
             Binding="{Binding Path=SelectedValue,
                               Converter={StaticResource enumstringConv}, 
                               ElementName=chkFieldType}">
0 голосов
/ 04 июля 2011

Я закончил настройку видимости вручную с помощью кода позади, когда происходит событие selectedItem.

0 голосов
/ 09 июня 2011

SelectedItem и SelectedValue - это два отдельных свойства в ComboBox. Поскольку все ваши ComboBoxItems являются строками, вы можете изменить
<DataTrigger Binding="{Binding Path=SelectedItem.SelectedValue, ElementName=chkFieldType}" Value="Inherit">
до
<DataTrigger Binding="{Binding Path=SelectedItem, ElementName=chkFieldType}" Value="Inherit">

0 голосов
/ 09 июня 2011

Я думаю, это потому, что вы помещаете DataTrigger в Border.Resources. Попробуйте поместить стиль в window.resources с помощью клавиши x:, чтобы применить стиль к границе.

Я думаю, что border.resources не может получить доступ к элементу управления "вне контекста своих ресурсов"

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