Вот пример того, как вы можете создать условный элемент управления:
public class ConditionalControl : ContentControl
{
static ConditionalControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof (ConditionalControl), new FrameworkPropertyMetadata(typeof (ConditionalControl)));
}
#region Condition DP
public bool Condition
{
get { return (bool) GetValue(ConditionProperty); }
set { SetValue(ConditionProperty, value); }
}
public static readonly DependencyProperty ConditionProperty =
DependencyProperty.Register("Condition", typeof (bool), typeof (ConditionalControl), new UIPropertyMetadata(false));
#endregion
#region TrueTemplate DP
public DataTemplate TrueTemplate
{
get { return (DataTemplate) GetValue(TrueTemplateProperty); }
set { SetValue(TrueTemplateProperty, value); }
}
public static readonly DependencyProperty TrueTemplateProperty =
DependencyProperty.Register("TrueTemplate", typeof (DataTemplate), typeof (ConditionalControl), new UIPropertyMetadata(null));
#endregion
#region FalseTemplate DP
public DataTemplate FalseTemplate
{
get { return (DataTemplate) GetValue(FalseTemplateProperty); }
set { SetValue(FalseTemplateProperty, value); }
}
public static readonly DependencyProperty FalseTemplateProperty =
DependencyProperty.Register("FalseTemplate", typeof (DataTemplate), typeof (ConditionalControl), new UIPropertyMetadata(null));
#endregion
}
Вот стиль, который вам нужно вставить в Themes/Generic.xaml
в вашем проекте:
<Style TargetType="{x:Type Controls:ConditionalControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Controls:ConditionalControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<ContentPresenter x:Name="FalseContentPresenter"
Content="{TemplateBinding DataContext}"
ContentTemplate="{TemplateBinding FalseTemplate}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Condition"
Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Controls:ConditionalControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<ContentPresenter x:Name="TrueContentPresenter"
Content="{TemplateBinding DataContext}"
ContentTemplate="{TemplateBinding TrueTemplate}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>