Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义控件的Silverlight样式。使用BasedOn属性_Silverlight_Controls - Fatal编程技术网

自定义控件的Silverlight样式。使用BasedOn属性

自定义控件的Silverlight样式。使用BasedOn属性,silverlight,controls,Silverlight,Controls,我以前使用DefaultStyleKey设置来设置datagrid的样式,但现在我想用另一个样式的BasedOn属性扩展一个样式。所以现在我有两个相同类型的样式,我必须比简单地设置DefaultStyleKey更具体 不幸的是,我似乎无法访问generic.xaml文件来获取我创建的样式 当您不想使用DefaultStyleKey,并且需要从代码中访问样式时,必须有一个解决方法。您是否正在寻找类似以下内容: public override void OnApplyTemplate() { bas

我以前使用DefaultStyleKey设置来设置datagrid的样式,但现在我想用另一个样式的BasedOn属性扩展一个样式。所以现在我有两个相同类型的样式,我必须比简单地设置DefaultStyleKey更具体

不幸的是,我似乎无法访问generic.xaml文件来获取我创建的样式


当您不想使用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的样式,当时我所需要的只是在现有网格上调整一个参数。