У меня есть пользовательский элемент управления, и в нем у меня есть несколько элементов управления textbox / calendar / ..., которые все они должны быть включены или отключены на основе свойства в моем пользовательском элементе управления (IsEditing)
Я создал свойство зависимости IsEditing в своем пользовательском элементе управления, и теперь я хочу определить стиль, чтобы все элементы управления использовали его для включения или отключения.
Я пытаюсь сделать что-то вроде этого:
<ad:DocumentContent.Resources>
<Style x:Key="ReadOnlyMode">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<Trigger Property="IsEditing" Value="True">
<Setter Property="Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</ad:DocumentContent.Resources>
Но я получаю эту ошибку: свойство 'IsEditing' не найдено в типе 'FrameworkElement'.
Как мне указать правильное свойство для триггеров?
Обновление 1:
Я определил IsEditing следующим образом:
public static readonly DependencyProperty IsEditingProperty = DependencyProperty.Register(
"IsEditing", typeof(Boolean), typeof(MyDetailDataControl), new PropertyMetadata(false));
И определены следующие стили:
<ad:DocumentContent.Resources>
<Style x:Key="ReadOnlyMode" xmlns:u="clr-namespace:MyProject.Controls" TargetType="{x:Type u:MyDetailDataControl}">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<Trigger Property="IsEditing" Value="True">
<Setter Property="Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</ad:DocumentContent.Resources>
Но сейчас я получаю следующую ошибку:
Свойство 'IsEditing' не найдено в типе 'MyDetailDataControl'.
Я думаю, что есть проблема с определением свойства зависимости.
Обновление 2:
Я изменил xaml следующим образом (добавьте xmlns: l = "clr-namespace: MyProject.Controls" в разделе управления пользователем, чтобы пространство имен стало доступно везде), а также использовал метод, который определен здесь http://www.wpfmentor.com/2009/01/how-to-debug-triggers-using-trigger.html для отладки триггера)
<ad:DocumentContent.Resources>
<Style x:Key="ReadOnlyMode" TargetType="TextBox">
<Style.Triggers>
<Trigger my:TriggerTracing.TriggerName="BoldWhenMouseIsOver" my:TriggerTracing.TraceEnabled="True" Property="l:MyDetailDataControl.IsEditing" Value="True">
<Setter Property="TextBox.Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</ad:DocumentContent.Resources>
Но триггер не сработал? Нужно ли вам реализовать механизм уведомления свойства? если да, как я могу это сделать? Существует ли какая-либо специальная техника для реализации уведомления об изменении свойства, когда свойство является присоединенным свойством?
Обновление 3:
Изменено на эту версию, которая не связана с моим собственным свойством IsEditing. Но все равно не работает.
<ad:DocumentContent.Resources>
<Style x:Key="MyStyle" TargetType="{x:Type l:MyDetailDataControl}" >
<Style.Triggers>
<Trigger my:TriggerTracing.TriggerName="BoldWhenMouseIsOver" my:TriggerTracing.TraceEnabled="True" Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ad:DocumentContent.Resources>