簡體   English   中英

以編程方式修改樣式內的屬性

[英]Modify Properties inside a Style programmatically

我在UserControl的資源中定義了以下樣式:

<Style x:Key="MenuItemButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Width="40" Height="40" Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="1,1,1,1" CornerRadius="3">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Button.Foreground" Value="#666666" />
    <Setter Property="Button.Background" Value="Transparent" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Button.Cursor" Value="Hand" />
            <Setter Property="Button.Foreground" Value="White" />
            <Setter Property="Button.Background" Value="#666666" />
        </Trigger>
    </Style.Triggers>
</Style>

例如,我使用它如下:

<Button Click="Toolbar_DocumentMarkup_Click" Name="BtnUnderline" Margin="10,0,0,0" Style="{StaticResource MenuItemButton}">
    <fa:FontAwesome VerticalAlignment="Center" Icon="Underline" FontSize="24"/>
</Button>

我需要從后面的代碼以編程方式設置邊框的寬度和高度,以便在運行時更新視圖。

到目前為止我嘗試了什么

通過參考資料訪問該樣式:

var style = Resources["MenuItemButton"] as Style

但我在這個樣式對象中找不到合適的屬性。

另一個想法:

將寬度和高度定義為DependencyProperties或實現INotifyPropertyChanged,但我認為在我的情況下,以編程方式設置這兩個值要容易得多。

關於這個問題的一些意見或建議?

將此添加到您的資源:

 <sys:Double x:Key="ButtonHeight">200</sys:Double>
 <sys:Double x:Key="ButtonWidth">200</sys:Double>

<Style x:Key="MenuItemButton" TargetType="Button">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border Width="40" Height="40" Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="1,1,1,1" CornerRadius="3">
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>
<Setter Property="Height" Value="{DynamicResource ButtonHeight}" />
<Setter Property="Width" Value="{DynamicResource ButtonWidth}" />
<Setter Property="Button.Foreground" Value="#666666" />
<Setter Property="Button.Background" Value="Transparent" />
<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Button.Cursor" Value="Hand" />
        <Setter Property="Button.Foreground" Value="White" />
        <Setter Property="Button.Background" Value="#666666" />
    </Trigger>
</Style.Triggers>

然后在您的代碼后面使用以下代碼更改它:

this.Resources["ButtonHeight"] = ...

this.Resources["ButtonWidth"] = ...

編輯:忘了你當然需要添加系統路徑

xmlns:sys="clr-namespace:System;assembly=mscorlib"

暫無
暫無

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

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