在Silverlight中,怎么重新设置一个控件的Style,我尝试重新设置时却抛出“灾难性故障 (异常来自 HRESULT0x8000FFFF (E_UNEXPECTED))”,是不是因为Style被锁住,不能更改了?那怎么实现变换Style呢?
Xaml
<UserControl x:Class="SLApp.Page"
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"
Width="400" Height="300">
<UserControl.Resources>
<Style x:Key="test" TargetType="Button" >
<Setter Property="Background" Value="Black"/>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Button Click="Button_Click" Style="{StaticResource test}"/>
</Grid>
</UserControl>
C#
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Style newStyle = new Style();
newStyle.TargetType = typeof(Button);
newStyle.Setters.Add(new Setter(Button.BackgroundProperty,new SolidColorBrush(Colors.Red)));
(sender as Button).Style = newStyle;
}
}
我没尝试过动态改变控件的Style,我通常是移除旧有的相关样式资源,然后再载入新的资源(定义在不同XAML里,由App.xaml引入)
给出一个我此前的WPF程序更换语言包资源的代码,希望对你有用:
Code
public static void 载入语言资源()
{
var App = Application.Current;
foreach (ResourceDictionary f in App.Resources.MergedDictionaries)
{
if (f.Source.ToString() == "Language\\zh-cn\\Index.xaml")
{
App.Resources.MergedDictionaries.Remove(f);
break;
}
}
if (配置.语言.ToLower().IndexOf( "en-us")>=0 || 配置.语言.ToLower().IndexOf("zh-cn")>=0)
{
App.Resources.MergedDictionaries.Insert(0, Application.LoadComponent(new Uri(语言包路径 + "Index.xaml", UriKind.Relative)) as ResourceDictionary);
}
else
{
App.Resources.MergedDictionaries.Insert(0, XamlReader.Load(new FileStream(Path.Combine(Core.变量.程序集.程序所在目录路径, 语言包路径 + "Msg.xaml"), FileMode.Open)) as ResourceDictionary);
App.Resources.MergedDictionaries.Insert(0, XamlReader.Load(new FileStream(Path.Combine(Core.变量.程序集.程序所在目录路径, 语言包路径 + "Tip.xaml"), FileMode.Open)) as ResourceDictionary);
App.Resources.MergedDictionaries.Insert(0, XamlReader.Load(new FileStream(Path.Combine(Core.变量.程序集.程序所在目录路径, 语言包路径 + "UI.xaml"), FileMode.Open)) as ResourceDictionary);
}
}
我在进行对控件绑定的时候也有这种错误。
请问楼主如何解决的 我是sl4
Style style = new Style(typeof(Slider));
Setter setter = (Setter)XamlReader.Load(xaml.ToString());
int k = style.Setters.Count;
style.Setters.Add(Con);
k=0 抛出这个异常
如何解决这个问题呢?
我在一次引用style时 控件类型和targetType类型不匹配,也报同样的错误,