Элемент управления белого цвета при установке DefaultStyleKey - PullRequest
1 голос
/ 27 января 2012

Кажется, я нигде не могу найти никого, кто сталкивался бы с подобной проблемой ...

Так что у меня есть пользовательский элемент управления, унаследованный от Button.Когда я не применяю стиль по умолчанию, он загружает общий стиль кнопки, и все в порядке.Когда я применяю стиль, элемент управления отображается как чистый белый квадрат без какой-либо функциональности (щелчок не работает и т. Д.).Я уверен, что это что-то в моем стиле, что портит это, но когда я применяю стиль через ключ в XAML, он отлично работает.

Мой код ...

[TemplateVisualState(Name = "Normal", GroupName = "Common"),
TemplateVisualState(Name = "Disabled", GroupName = "Common"),
TemplateVisualState(Name = "Pressed", GroupName = "Common"),
TemplateVisualState(Name = "MouseOver", GroupName = "Common"),
TemplateVisualState(Name = "Alert", GroupName = "AlarmStates"),
TemplateVisualState(Name = "NoAlert", GroupName = "AlarmStates"),
TemplateVisualState(Name = "Warning", GroupName = "AlarmStates")]
public class AlarmButtonControl : Button
{
    /// <summary>
    /// Constructor
    /// </summary>
    public AlarmButtonControl()
    {
        this.DefaultStyleKey = typeof(AlarmButtonControl);
    }
}

и стиль XAML ...

<ControlTemplate x:Key="StatusButton" >
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="Common">
                    <VisualStateGroup.Transitions>
                        <VisualTransition From="Pressed" GeneratedDuration="0:0:0.75" To="MouseOver"/>
                    </VisualStateGroup.Transitions>
                    <VisualState x:Name="Normal"/>
                    <VisualState x:Name="Disabled">
                        <Storyboard>
                            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Highlight2" d:IsOptimized="True"/>
                            <ColorAnimation Duration="0" To="#BF000000" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="Highlight2" d:IsOptimized="True"/>
                            <ColorAnimation Duration="0" To="#33666666" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="Base" d:IsOptimized="True"/>
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Pressed">
                        <Storyboard>
                            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Highlight2" d:IsOptimized="True"/>
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="MouseOver">
                        <Storyboard>
                            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Highlight1" d:IsOptimized="True"/>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Viewbox Stretch="Fill">
                <Grid>
                    <Path x:Name="Base" 
                          StrokeThickness="1.0" 
                          Stroke="#ff000000" 
                          StrokeMiterLimit="1.0" 
                          Fill="{TemplateBinding Background}" Data="F1 M 99.500,99.500 L 0.500,99.500 L 0.500,0.500 L 99.500,0.500 L 99.500,99.500 Z"/>
                    <Rectangle x:Name="Highlight2" Fill="#3F000000" Margin="5" StrokeThickness="1.0" StrokeMiterLimit="1.0" Opacity="0"/>
                    <Path x:Name="Interior" Opacity="0.5" StrokeThickness="1.0" Stroke="#ff191919" StrokeMiterLimit="1.0" Data="F1 M 97.500,97.500 L 2.500,97.500 L 2.500,2.500 L 97.500,2.500 L 97.500,97.500 Z">
                        <Path.Fill>
                            <LinearGradientBrush MappingMode="Absolute" StartPoint="2.500,2.499" EndPoint="97.500,97.499">
                                <LinearGradientBrush.Transform>
                                    <MatrixTransform Matrix="1.000,0.000,-0.000,-1.000,0.000,100.000" />
                                </LinearGradientBrush.Transform>
                                <GradientStop Offset="0.00" Color="#3FFFFFFF"/>
                                <GradientStop Offset="0.151" Color="Transparent"/>
                                <GradientStop Offset="1.00" Color="#BFFFFFFF"/>
                                <GradientStop Color="#53FFFFFF" Offset="0.655"/>
                            </LinearGradientBrush>
                        </Path.Fill>
                    </Path>
                    <Path x:Name="LargeShader" Opacity="0.05" Fill="#ffffffff" Data="F1 M88.334,3.1789145E-07 L88.334,45.334 L0,45.334 C0,45.334 88.334,48.681 88.334,3.1789145E-07 z" Margin="6.333,49.333,5.333,5.284" UseLayoutRounding="False"/>
                    <Path x:Name="SmallShader" Opacity="0.05" Fill="#ffffffff" Data="F1 M74.333664,3.1789145E-07 L74.334,28.334332 L0,28.334332 C0,28.334332 60.000332,29.333 74.333664,3.1789145E-07 z" Height="28.339" Margin="20.333,0,5.333,5.328" UseLayoutRounding="False" VerticalAlignment="Bottom"/>
                    <Rectangle x:Name="Highlight1" Fill="#3FC0C0C0" Margin="5" StrokeThickness="1.0" StrokeMiterLimit="1.0" Opacity="0"/>
                </Grid>
            </Viewbox>
            <ContentPresenter x:Name="contentPresenter"
                              Height="{TemplateBinding Height}" 
                              Width="{TemplateBinding Width}" 
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                              Margin="5"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
        </Grid>
    </ControlTemplate>

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 января 2012

Вы не включили Style просто ControlTemplate. Также для стиля по умолчанию вы должны назначать только свойство TargetType стиля. Нечто подобное должно быть в файле themes \ generic.xaml:

<Style TargetType="local:AlarmButtonControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:AlarmButtonControl">
                <!-- Your template contents here -->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style> 
...