积极答复者
一定需要把xaml样式转化成代码形式?

问题
答案
-
可以转化 也可以读出来xml 修改后放回去
紫柔版主的头像真叫萌得一个不行啊。。。。- 已标记为答案 Jim Zhou - MSFTModerator 2009年6月3日 7:26
-
您好,
-->不是吧,可以修改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- 已标记为答案 Jim Zhou - MSFTModerator 2009年6月3日 7:26
全部回复
-
可以转化 也可以读出来xml 修改后放回去
紫柔版主的头像真叫萌得一个不行啊。。。。- 已标记为答案 Jim Zhou - MSFTModerator 2009年6月3日 7:26
-
您好,
-->不是吧,可以修改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- 已标记为答案 Jim Zhou - MSFTModerator 2009年6月3日 7:26