Как найти свойство IsEnabled дочернего элемента управления в ListBoxItem для Trigger

Я пытаюсь отключить элемент ListBox в зависимости от свойства IsEnabled содержимого ListBoxItem. Как и в этом коде, кнопка 1 имеет IsEnabled=False, но элемент списка можно выбрать. Я хочу отключить выбор, если свойство IsEnabled содержимого имеет значение false. как запустить поиск содержимого элемента и его свойства IsEnabled.

<Grid>
      <ListBox>
         <ListBox.ItemTemplate>
            <DataTemplate>
               <DataTemplate.Triggers>
                  <Trigger Property="IsEnabled"  Value="False">
                     <Setter Property="IsEnabled" Value="False"/>
                  </Trigger>
               </DataTemplate.Triggers>
            </DataTemplate>
         </ListBox.ItemTemplate>
         <ListBoxItem>
            <Button IsEnabled="False">1</Button>
         </ListBoxItem>
         <ListBoxItem>
            <Button>2</Button>
         </ListBoxItem>
         <ListBoxItem>
            <Button>3</Button>
         </ListBoxItem>         
      </ListBox>
</Grid>

1 ответ

Почему бы просто не установить IsEnabled на ваше ListBoxItem вместо? Следует отключить Button также.

Но, тем не менее, вы можете связать Button.IsEnabled в ListBoxItem.IsEnabled используя RelativeSource привязка, и установите IsEnabled собственность ListBoxItem, не Button тоже

<Button IsEnabled="{Binding IsEnabled, 
    RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}" />

Если вы работаете с WPF, я настоятельно рекомендую вам изучить шаблон проектирования MVVM. Он хорошо подходит для WPF, и с его помощью вы бы связали оба ListBoxItem.IsEnabled а также Button.IsEnabled к тому же свойству в DataContext

Другие вопросы по тегам