WPF更改资源中的厚度对象并在后面的代码中分配

时间:2011-03-02 07:32:27

标签: c# wpf

我在Window的资源集合中定义了一个Thickness资源,它在所有方面都设置为值10。那个窗口里有3个按钮。

点击第三个按钮后,我正在获取该资源的值,更改它(200,所有边缘)并静态应用第一个按钮并动态地应用第二个按钮,但仍然为它拾取旧值(10)动态使用它的按钮。对于Buttton静态使用它,它应该获取旧值(10),但我认为只是因为第二个按钮是动态获取它,它将反映更改(200)。

<Window x:Class="WpfApplicationUnleashed.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplicationUnleashed"
        Title="Window1" >


    <Window.Resources>
        <Thickness x:Key="BadiThickness">10</Thickness>
    </Window.Resources>

    <StackPanel>
        <Button x:Name="cmdStatic" HorizontalAlignment="Center" >
            I am Static
        </Button

        <Button x:Name="cmdDynamic" HorizontalAlignment="Center" >
            I am Dynamic 
        </Button>

        <Button x:Name="cmdChanger" HorizontalAlignment="Center" Click="cmdChanger_Click">
 I am Changer
        </Button>
    </StackPanel>
</Window>

代码:

private void cmdChanger_Click(object sender, RoutedEventArgs e)
{
    Thickness th = (Thickness)this.FindResource("BadiThickness");
    th.Bottom = 200;
    th.Top = 200;
    th.Left = 200;
    th.Right = 200;

    cmdDynamic.SetResourceReference(Button.MarginProperty, "BadiThickness");
    cmdStatic.Margin = (Thickness)this.FindResource("BadiThickness");
}

1 个答案:

答案 0 :(得分:3)

您确实意识到Thickness是一种值类型,这就是为什么当您更改它的值时,它不会在资源中受到影响。

您可以采取以下措施来设置该资源的值:

this.Resource["BadiThickness"] = new Thickness(200);

另外,请避免在资源名称中使用印地语。这可能会误导。