2009-12-11 5 views
1

У меня есть кнопка в ListBoxItem. Я хочу, чтобы кнопка оставалась включенной, даже если элемент списка заблокирован. Это возможно?WPF - кнопка Keep включена даже в контейнере отключена

Вот мой код стиля для списка, элемента списка и кнопки (называемой btnPick).

<Window.Resources> 
<Style x:Key="CheckBoxListStyle" TargetType="ListBox"> 
    <Style.Resources> 
    <Style TargetType="ListBoxItem"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ListBoxItem"> 
     <Grid ScrollViewer.CanContentScroll="True" Margin="2"> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="20" /> 
     <ColumnDefinition Width="50" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="30" /> 
     </Grid.ColumnDefinitions> 
     <CheckBox VerticalAlignment="Center" Grid.Column="0" IsChecked="{Binding IsSelected, 
      RelativeSource={RelativeSource TemplatedParent}, 
      Mode=TwoWay}" Name="chkSelectedCheckBox" /> 
     <TextBlock VerticalAlignment="Center" Grid.Column="1" Margin="5,0,5,0" Text="{Binding Id}" /> 
     <TextBlock VerticalAlignment="Center" Grid.Column="2" Margin="5,0,5,0" Text="{Binding Title}" /> 

     <!--This is the one that I want to stay enabled somehow--> 
     <Button HorizontalAlignment="Right" x:Name="btnPick" Grid.Column="3" Tag="{Binding Id}" Margin="5,0,5,0"/>      
     </Grid>           
     </ControlTemplate>        
    </Setter.Value>         
    </Setter>           
    <Style.Triggers> 
     <DataTrigger Value="True"> 
      <DataTrigger.Binding> 
       <MultiBinding Converter="{StaticResource DisableWorkItemConverter}"> 
        <Binding ElementName="MainForm" Path="PickedWorkItemID"/> 
        <Binding Path="Id"/> 
        <Binding ElementName="btnCreateLink" Path="IsClicked"></Binding> 
       </MultiBinding> 
      </DataTrigger.Binding> 
      <Setter Property="IsEnabled" Value="False"/> 
      <Setter Property="loc:Main.IsCurrentItemEnabledChanged" Value="True"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style>           
    </Style.Resources>         
</Style>            
</Window.Resources>         

Прямо сейчас мой триггер данных задает значение IsEnabled для всей позиции. Возможно ли каким-то образом получить доступ к дочерним элементам ListBoxItem?

Что-то вроде:

<Setter Property="chkSelectedCheckBox.IsEnabled" Value="False"/> 

Это то, что я ищу (но это не работает). (Я думал, что TargetName может помочь мне, но это работает только для DataTemplates.)

Спасибо за любую помощь.

ответ

1

Вместо того, чтобы говорить IsEnabled = "false" для ListBoxItem, задайте свойство IsEnabled внутренних элементов false как CheckBox и все. Это будет поддерживать вашу кнопку в любом случае.

+0

Спасибо за предложение, но как я могу это сделать? Я обновил свой код, чтобы показать свой DataTrigger. Если вы знаете способ изменить его, чтобы я мог просто отключить определенные части детей ListBoxItem, я хотел бы это услышать. – Vaccano

+0

Я понял, как это сделать (я переместил DataTrigger в секцию ControlTemplate.Trigger). Он отключил этот флажок, но нажатие на него по-прежнему делает его проверкой – Vaccano

+0

, это происходит из-за привязки, установленной в свойстве IsChecked CheckBox с свойством IsSelected. вы можете удалить свойство «Связывание» и «Обновить IsChecked» вручную, или вы можете использовать UpdateSourceTrigger = «Явно» в Binding и вызвать метод UpdateTarget – viky

Смежные вопросы