Witajcie. Mam klasę ModuleElement która posiada właściwości **IsSelected **oraz IsEnabled Stworzyłem 3 buttony, i umieściłem instancje tych klas jako **DataContext **tych buttonów..
<Button x:Name="hElementCreateAccount" Margin="0,0,7,0">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="false">
<Setter Property="Template" Value="{StaticResource ButtonStandard}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected}" Value="true">
<Setter Property="Template" Value="{StaticResource ButtonSelected}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnabled}" Value="false">
<Setter Property="Template" Value="{StaticResource ButtonDeactivated}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<Button.DataContext>
<Type:ModuleElement x:Name="hElementCreateAccountData" ModuleNameEnum="CreateAccount" RequiredPrivileges="Undefined" ActiveWhenLogged="False" ActiveWhenNotLogged="True" />
</Button.DataContext>
</Button>
Gdy w tym miejscu używam **triggera **do określenia **template **wszystko działa cacy. Niestety mam 3 buttony a w kursach kazali mi jak najczęściej robić szablony, jeżeli kilka kontrolek korzysta z tych samych styli. Zrobiłem więc taki szablon w oddzielnym pliku ResourceDisctionary oraz potrzebne konwertery:
<Style TargetType="Button" x:Key="hButtonStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=DataContext, Converter={StaticResource GetIsSelectedFromDataContext}}" Value="false">
<Setter Property="Template" Value="{StaticResource ButtonStandard}"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=DataContext, Converter={StaticResource GetIsSelectedFromDataContext}}" Value="true">
<Setter Property="Template" Value="{StaticResource ButtonSelected}"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=DataContext, Converter={StaticResource GetIsEnabledFromDataContext}}" Value="true">
<Setter Property="Template" Value="{StaticResource ButtonDeactivated}"/>
</DataTrigger>
</Style.Triggers>
</Style>
// DataContext To IsSelected Converter
class DataContextToIsSelectedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
bool Val = (value as ModuleElement).IsSelected;
return (Val == true) ? "true" : "false";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
// DataContext To IsEnabled Converter
class DataContextToIsEnabledConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
bool Val = (value as ModuleElement).IsEnabled;
return (Val == true) ? "true" : "false";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
W kontrolkach button dodałem:
Style="{StaticResource hButtonStyle}
Niestety to cholerstwo za cholerę nie chce mi działać :( Kontrolki mi znikają jakby template przestał istnieć. Możecie pomóc zlokalizować problem?