自定义控件的Silverlight样式。使用BasedOn属性
我以前使用DefaultStyleKey设置来设置datagrid的样式,但现在我想用另一个样式的BasedOn属性扩展一个样式。所以现在我有两个相同类型的样式,我必须比简单地设置DefaultStyleKey更具体 不幸的是,我似乎无法访问generic.xaml文件来获取我创建的样式自定义控件的Silverlight样式。使用BasedOn属性,silverlight,controls,Silverlight,Controls,我以前使用DefaultStyleKey设置来设置datagrid的样式,但现在我想用另一个样式的BasedOn属性扩展一个样式。所以现在我有两个相同类型的样式,我必须比简单地设置DefaultStyleKey更具体 不幸的是,我似乎无法访问generic.xaml文件来获取我创建的样式 当您不想使用DefaultStyleKey,并且需要从代码中访问样式时,必须有一个解决方法。您是否正在寻找类似以下内容: public override void OnApplyTemplate() { bas
当您不想使用DefaultStyleKey,并且需要从代码中访问样式时,必须有一个解决方法。您是否正在寻找类似以下内容:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/CustomControl;component/Themes/generic.xaml", UriKind.RelativeOrAbsolute);
Style style = rd["StyleKey"] as Style;
}
“CustomControl”是项目的名称,StyleKey是要访问的样式的键。那么为什么不能扩展datagrid,创建一个新类并使用默认样式键作为新类型,在generic.xaml中可以基于以前的样式创建一个新样式 但在siverlight中,我们创建一个基础样式作为命名样式,并从中继承样式
<style x:Key="BaseDataGrid"
<style TargetType="MyGrid1"
BasedOn="BaseDataGrid"
<style TargetType="MyGrid2"
BasedOn="BaseDataGrid"
是的,这是一个解决方案,但我想避免完全重新创建datagrid的样式,当时我所需要的只是在现有网格上调整一个参数。