none
一定需要把xaml样式转化成代码形式? RRS feed

  • 问题

  • 请问 存在xaml的样式,我代码加载并应用在按钮上,现在我需要修改这个样式,用代码方式,可以吗? 一定需要把xaml样式转化成代码形式?
    2009年6月1日 1:38

答案

  • 可以转化  也可以读出来xml 修改后放回去
    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年6月1日 4:21
  • 您好,

    -->不是吧,可以修改xml中的style.比如 Style s=FindResource("xstyle");之后还可以修改Style?  怎么弄啊?

     

    你用FindResource方法找出定义在resource 节点中的Style 实例后,如果这个Style已经应用在其他element上时,是不可以直接修改这个Style实例的。如果没有应用于其他element,那么你可以直接修改。

    对于Style已经应用于其他element的情况,要修改的话你有两种方法,要么Clone一个新的Style,要么用代码重新造一个。当然用Clone这种方法更方便一些。下面是一个小例子:

     

    XAML code:

      <Window.Resources>

            <Style TargetType="Button" x:Key="buttonKey">

                <Setter Property="Background" Value="Green" />

            </Style>

        </Window.Resources>

            <StackPanel>

            <Button Name="button1"  Style="{StaticResource buttonKey}" Height="30" />

            <Button Content="Change Style"  Click="OnChangeStyle" />

        </StackPanel>

    后台代码:

        private void OnChangeStyle(object sender, RoutedEventArgs e)

            {

                Style style = this.Resources["buttonKey"] as Style;

                Style styleClone = CloneStyle(style) as Style;

                (styleClone.Setters[0] as Setter).Value = Brushes.Red;   //change the Green to Red color

                //add a new setter

                Setter setter = new Setter();

                setter.Property = Button.WidthProperty;

                setter.Value = 200.0;

                styleClone.Setters.Add(setter);

                button1.Style = styleClone;

            }

            private DispatcherObject CloneStyle(DispatcherObject e)

            {

                XmlDocument document = new XmlDocument();

                document.LoadXml(XamlWriter.Save(e));

                return (DispatcherObject)XamlReader.Load(new XmlNodeReader(document));

            }

     

    谢谢


    Jim Zhou -MSFT
    2009年6月2日 9:23
    版主

全部回复

  • 可以转化  也可以读出来xml 修改后放回去
    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年6月1日 4:21
  • 可以转化  也可以读出来xml 修改后放回去
    紫柔版主的头像真叫萌得一个不行啊。。。。

    不是吧,可以修改xml中的style.比如 Style s=FindResource("xstyle");之后还可以修改Style吗?  怎么弄啊?
    2009年6月1日 10:32
  • 您好,

    -->不是吧,可以修改xml中的style.比如 Style s=FindResource("xstyle");之后还可以修改Style?  怎么弄啊?

     

    你用FindResource方法找出定义在resource 节点中的Style 实例后,如果这个Style已经应用在其他element上时,是不可以直接修改这个Style实例的。如果没有应用于其他element,那么你可以直接修改。

    对于Style已经应用于其他element的情况,要修改的话你有两种方法,要么Clone一个新的Style,要么用代码重新造一个。当然用Clone这种方法更方便一些。下面是一个小例子:

     

    XAML code:

      <Window.Resources>

            <Style TargetType="Button" x:Key="buttonKey">

                <Setter Property="Background" Value="Green" />

            </Style>

        </Window.Resources>

            <StackPanel>

            <Button Name="button1"  Style="{StaticResource buttonKey}" Height="30" />

            <Button Content="Change Style"  Click="OnChangeStyle" />

        </StackPanel>

    后台代码:

        private void OnChangeStyle(object sender, RoutedEventArgs e)

            {

                Style style = this.Resources["buttonKey"] as Style;

                Style styleClone = CloneStyle(style) as Style;

                (styleClone.Setters[0] as Setter).Value = Brushes.Red;   //change the Green to Red color

                //add a new setter

                Setter setter = new Setter();

                setter.Property = Button.WidthProperty;

                setter.Value = 200.0;

                styleClone.Setters.Add(setter);

                button1.Style = styleClone;

            }

            private DispatcherObject CloneStyle(DispatcherObject e)

            {

                XmlDocument document = new XmlDocument();

                document.LoadXml(XamlWriter.Save(e));

                return (DispatcherObject)XamlReader.Load(new XmlNodeReader(document));

            }

     

    谢谢


    Jim Zhou -MSFT
    2009年6月2日 9:23
    版主