簡體   English   中英

在運行時無法更改ControlTemplate的屬性

[英]Can't change properties of ControlTemplate at runtime

我有一個自定義的3狀態Button ,該Button應在單擊時在3個不同狀態(顏色)之間循環。 但是,我編寫的單擊處理程序對ControlTemplate Border的背景顏色沒有任何影響。

我可能會錯過一些非常簡單的東西,但是我非常感謝您能以嶄新的眼神認出可能是什么樣的東西。

下面是ControlTemplateButton.Click處理程序:

<Style x:Key="FilterButtonStyle"  TargetType="{x:Type local:FilterButton}"
           BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="ButtonBackground" BorderThickness="0" Padding="0"
                    Margin="0" CornerRadius="6"
                    Background="{StaticResource blueShader}" >
                    <ContentPresenter HorizontalAlignment="Center"
                        VerticalAlignment="Center"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Effect" Value="{StaticResource glowShadow}">
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="{StaticResource textBrush}"/>
    <Setter Property="Margin" Value="4,4,0,4"></Setter>
    <Setter Property="Padding" Value="4"></Setter>
    <Setter Property="Height" Value="55"></Setter>
    <Setter Property="Width" Value="55"></Setter>
    <Setter Property="FontSize" Value="10"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
    <Setter Property="HasDisabledState" Value="True"></Setter>
    <Setter Property="OnColour" Value="{StaticResource greenShader}"></Setter>
    <Setter Property="OffColour" Value="{StaticResource blueShader}"></Setter>
    <Setter Property="DisabledColour" Value="{StaticResource redShader}"></Setter>
</Style>
private void FilterButton_Click(object sender, RoutedEventArgs e)
{
    if (!this.CanChangeState) { return; }

    // Get child border element.
    Border border = this.Template.LoadContent() as Border;

    // Cycle through button states.
    switch (this.ButtonState)
    {
        case ButtonStates.Off:
            this.ButtonState = ButtonStates.On;
            border.Background = this.OnColour;
            break;

        case ButtonStates.On:
            if (this.HasDisabledState)
            {
                this.ButtonState = ButtonStates.Disabled;
                border.Background = this.DisabledColour;
            }
            else
            {
                this.ButtonState = ButtonStates.Off;
                border.Background = this.OffColour;
            }
            break;

        case ButtonStates.Disabled:
            this.ButtonState = ButtonStates.Off;
            border.Background = this.OffColour;
            break;
    }
}

沒關系,我發現處理此問題的更好方法是使用ControlTemplate觸發器基於ButtonState屬性更改Button顏色。

    <Style x:Key="FilterButtonStyle"  TargetType="{x:Type local:FilterButton}"
       BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="ButtonBackground" BorderThickness="0" Padding="0" Margin="0" CornerRadius="6"
                    Background="{StaticResource blueShader}" >
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Effect" Value="{StaticResource glowShadow}">
                        </Setter>
                    </Trigger>
                    <Trigger Property="local:FilterButton.ButtonState" Value="On">
                        <Setter TargetName="ButtonBackground" Property="Background" Value="{StaticResource greenShader}"></Setter>
                    </Trigger>
                    <Trigger Property="local:FilterButton.ButtonState" Value="Off">
                        <Setter TargetName="ButtonBackground" Property="Background" Value="{StaticResource blueShader}"></Setter>
                    </Trigger>
                    <Trigger Property="local:FilterButton.ButtonState" Value="Disabled">
                        <Setter TargetName="ButtonBackground" Property="Background" Value="{StaticResource redShader}"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="{StaticResource textBrush}"/>
    <Setter Property="Margin" Value="4,4,0,4"></Setter>
    <Setter Property="Padding" Value="4"></Setter>
    <Setter Property="Height" Value="55"></Setter>
    <Setter Property="Width" Value="55"></Setter>
    <Setter Property="FontSize" Value="10"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
    <Setter Property="HasDisabledState" Value="True"></Setter>
</Style>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM