WPF Измените Толщину объекта в Ресурсе и назначьте в коде позади - PullRequest
0 голосов
/ 02 марта 2011

Я определил один ресурс Thickness в коллекции ресурсов Window, для которого установлено значение 10 по всем сторонам.У меня есть 3 кнопки в этом окне.

После нажатия третьей кнопки я извлекаю значение этого ресурса, меняю его (200, все ребра) и применяю его статически для первой кнопки и динамически для второй, но все же он забирает старое значение (10) для кнопки, которая использует его динамически.Для Баттона, использующего его статически, предполагалось получить старое значение (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 Ответ

3 голосов
/ 02 марта 2011

Вы понимаете, что Thickness является типом значения, и поэтому при изменении его значения оно не будет затронуто в ресурсе.

Чтобы установить значение этого ресурса, вы можете сделать следующее:

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

В примечании, пожалуйста, избегайте использования хинди в названии ресурса. Это может ввести в заблуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...