2015-03-18 9 views
2

Я пытаюсь установить цвет фона DataGridTextColumn на другой цвет, если он доступен только для чтения. Я делаю это с помощью следующего кода:RelativeSource data trigger binding не работает

<DataGridTextColumn Header="Test" IsReadOnly="True"> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridTextColumn}}}" Value="True"> 
        <Setter Property="Background" Value="LightGreen"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 

Я не имею никакой удачи, однако удаление результатов триггеров в фоновом режиме, чтобы всегда быть светло-зеленым. Что-то не так с привязкой триггера данных? Я относительно новичок в WPF, но это то, что я могу найти в Интернете. В идеале это было бы в App.XAML, поэтому он работал бы во всех столбцах, таких как это, так будет ли тогда способ перевести это в стиль? Благодарю.

Редактировать ---------

Если я связываю по ElementName это работает:

<DataTrigger Binding="{Binding IsReadOnly, ElementName=stupid}" Value="True"> 
     <Setter Property="Foreground" Value="Red" /> 
</DataTrigger> 

Однако я хотел бы, чтобы это было более общим, если это возможно. Еще раз спасибо.

ответ

1

Редактировать: Не проверял свойство фона на DataGridTextColumn вначале.

Это ответил на ваш первоначальный вопрос -

<DataGridTextColumn Header="Test" IsReadOnly="True" Binding="{Binding name}" x:Name="MyColumn"> 
<DataGridTextColumn.ElementStyle> 
    <Style TargetType="{x:Type TextBlock}"> 
    <Style.Triggers> 
    <DataTrigger Binding="{Binding IsReadOnly, ElementName=MyColumn}" Value="True"> 
    <Setter Property="Background" Value="Orange" /> 
    </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 

Чтобы ответить на ваш второй вопрос, то DataTrigger binidng вы ищете это:

<DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="True"> 

В сводке, обратите внимание на родителя DataGridCell вместо DataGridTextColumn , Причина этого в том, что TextBlock, который вы пытаетесь создать, на самом деле не является дочерним элементом DataGridTextColumn, а является дочерним элементом сверстника DataGridTextColumn.

+0

Спасибо. Однако мне нужно установить фон элемента 'DataGridTextColumn', его' TextBlock'. 'DataGridTextColumn' не имеет свойства« Background ». –

+0

Ах не пробовал первый бит в VS. Обновлен мой ответ - снова проверьте – Clark

+0

Спасибо, что работает. Знаете ли вы, можно ли сделать это более общим? Может быть, стиль применяется ко всему приложению, а не по имени? Может быть, новый вопрос более уместен, я не уверен. –

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