wpf中后台怎么引用前台的样式

沫林 2019-01-14 10:51:47
这是一个用户控件,前台上写了一个key叫styleTabItemDefault,TargetType="{x:Type TabItem}"的样式,在前台引用这个样式可以正常引用,但是写到后台就报错了,提示“找不到styleTabItemDefault资源 ”,我后台是
”hcyj.Style = FindResource("styleTabItemDefault") as Style;“(这里写的hcyj是实例化的一个TabItem对象)
“ hcyj.Style = (Style)this.FindResource("styleTabItemDefault");”这样写也不行,

百度上说需要在app.xaml里引用一下,因为这个类库里没app.xaml所以我就写了一个资源字典,结果还是不行,
我也看过,报错的地方是在main所在类库的app.xaml里,程序启动就是在这个地方 ,请问我是要在main所胡类库的app.xaml里写一个样式 吗?
...全文
1159 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wulangqq00100 2019-01-17
  • 打赏
  • 举报
回复
这个可以在GITHUB上找找。
kekuihuazi 2019-01-16
  • 打赏
  • 举报
回复
可以参考下
https://www.haolizi.net/example/view_15051.html
qq_44529818 2019-01-15
  • 打赏
  • 举报
回复
<em>后台</em>修改<em>样式</em> //Style myStyle = (Style)this.FindResource("TabItemstyle_btndel");
沫林 2019-01-15
  • 打赏
  • 举报
回复
已解决,样式要放在<UserControl.Resources></UserControl.Resources>或者是<Window.Resources></Window.Resources>这样的标签里才能引用
沫林 2019-01-15
  • 打赏
  • 举报
回复
引用 12 楼 groveer 的回复:
[quote=引用 11 楼 沫林 的回复:] [quote=引用 9 楼 groveer 的回复:] [quote=引用 6 楼 沫林的回复:][quote=引用 4 楼 groveer 的回复:] 第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
        Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);
第二种方法,需要先在App.xaml中加载资源字典:
Style = Application.Current.TryFindResource("MetroStyle") as Style;
MetroStyle为你写Style时设置的x:Key
第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?[/quote] 这关命名空间什么事?你的style不应该是xaml文件么? 建议看一下资源字典相关知识,自定义style可以放在单独控件下,也可以放在当前窗口下,也可以放在当前程序集下,也可以放在外部文件,然后加载使用,放在不同的地方,作用域不同,我说的两种方式都是style在外部文件的情况下,如果资源字典直接在本程序集里面,直接findresource就好了[/quote] 是不是自定义用户控件不能从后台改样式呀?[/quote] 你是想后台改样式还是想引用前台样式,自定义用户控件不存在引用不了前台样式: 这是前台样式:
<UserControl.Resources>
    <Style x:Key="TextStyle" TargetType="{x:Type TextBlock}">
      <Setter Property="Background" Value="Black"/>
      <Setter Property="Foreground" Value="White"/>
    </Style>
  </UserControl.Resources>
这是后台引用:
TextBlock text = new TextBlock
      {
        Text = "Hello,World",
        Style = TryFindResource("TextStyle") as Style
      };
      grid.Children.Add(text);
[/quote] 解决了,样式的地方写错了,写在<Grid.Resources></Grid.Resources>里了
groveer 2019-01-14
  • 打赏
  • 举报
回复
第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);


第二种方法,需要先在App.xaml中加载资源字典:

Style = Application.Current.TryFindResource("MetroStyle") as Style;

MetroStyle为你写Style时设置的x:Key
ilikeff8 2019-01-14
  • 打赏
  • 举报
回复
Application总能引用得到把

要不这样试下

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source=new Uri("Style/ButtonStyle.xaml")});
groveer 2019-01-14
  • 打赏
  • 举报
回复
两种方法,一种是通过路径引用xaml文件 一种是在App.xaml中引用资源词典再FindResource 程序不知道你的资源在哪所以会报错
desperaso 2019-01-14
  • 打赏
  • 举报
回复
可以参考下
https://www.haolizi.net/example/view_15051.html
https://www.haolizi.net/example/view_15045.html
https://www.haolizi.net/example/view_15008.html
groveer 2019-01-14
  • 打赏
  • 举报
回复
引用 11 楼 沫林 的回复:
[quote=引用 9 楼 groveer 的回复:]
[quote=引用 6 楼 沫林的回复:][quote=引用 4 楼 groveer 的回复:]
第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);


第二种方法,需要先在App.xaml中加载资源字典:

Style = Application.Current.TryFindResource("MetroStyle") as Style;

MetroStyle为你写Style时设置的x:Key

第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?[/quote]
这关命名空间什么事?你的style不应该是xaml文件么? 建议看一下资源字典相关知识,自定义style可以放在单独控件下,也可以放在当前窗口下,也可以放在当前程序集下,也可以放在外部文件,然后加载使用,放在不同的地方,作用域不同,我说的两种方式都是style在外部文件的情况下,如果资源字典直接在本程序集里面,直接findresource就好了[/quote]
是不是自定义用户控件不能从后台改样式呀?[/quote]
你是想后台改样式还是想引用前台样式,自定义用户控件不存在引用不了前台样式:
这是前台样式:
<UserControl.Resources>
<Style x:Key="TextStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
</Style>
</UserControl.Resources>

这是后台引用:
TextBlock text = new TextBlock
{
Text = "Hello,World",
Style = TryFindResource("TextStyle") as Style
};
grid.Children.Add(text);
沫林 2019-01-14
  • 打赏
  • 举报
回复
引用 9 楼 groveer 的回复:
[quote=引用 6 楼 沫林的回复:][quote=引用 4 楼 groveer 的回复:] 第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
        Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);
第二种方法,需要先在App.xaml中加载资源字典:
Style = Application.Current.TryFindResource("MetroStyle") as Style;
MetroStyle为你写Style时设置的x:Key
第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?[/quote] 这关命名空间什么事?你的style不应该是xaml文件么? 建议看一下资源字典相关知识,自定义style可以放在单独控件下,也可以放在当前窗口下,也可以放在当前程序集下,也可以放在外部文件,然后加载使用,放在不同的地方,作用域不同,我说的两种方式都是style在外部文件的情况下,如果资源字典直接在本程序集里面,直接findresource就好了[/quote] 是不是自定义用户控件不能从后台改样式呀?
沫林 2019-01-14
  • 打赏
  • 举报
回复
引用 9 楼 groveer 的回复:
[quote=引用 6 楼 沫林的回复:][quote=引用 4 楼 groveer 的回复:] 第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
        Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);
第二种方法,需要先在App.xaml中加载资源字典:
Style = Application.Current.TryFindResource("MetroStyle") as Style;
MetroStyle为你写Style时设置的x:Key
第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?[/quote] 这关命名空间什么事?你的style不应该是xaml文件么? 建议看一下资源字典相关知识,自定义style可以放在单独控件下,也可以放在当前窗口下,也可以放在当前程序集下,也可以放在外部文件,然后加载使用,放在不同的地方,作用域不同,我说的两种方式都是style在外部文件的情况下,如果资源字典直接在本程序集里面,直接findresource就好了[/quote] 我把样式直接写到app.xaml里去了,用说的第二种方法,现在不报错了,但是样式还是加载不出来额
groveer 2019-01-14
  • 打赏
  • 举报
回复
引用 6 楼 沫林的回复:
[quote=引用 4 楼 groveer 的回复:] 第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
        Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);
第二种方法,需要先在App.xaml中加载资源字典:
Style = Application.Current.TryFindResource("MetroStyle") as Style;
MetroStyle为你写Style时设置的x:Key
第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?[/quote] 这关命名空间什么事?你的style不应该是xaml文件么? 建议看一下资源字典相关知识,自定义style可以放在单独控件下,也可以放在当前窗口下,也可以放在当前程序集下,也可以放在外部文件,然后加载使用,放在不同的地方,作用域不同,我说的两种方式都是style在外部文件的情况下,如果资源字典直接在本程序集里面,直接findresource就好了
沫林 2019-01-14
  • 打赏
  • 举报
回复
引用 5 楼 exception1992 的回复:
hcyj.Style = FindResource("styleTabItemDefault") as Style; -》放到Loaded事件中呢
布星啊,直接死在loade事件那里了
沫林 2019-01-14
  • 打赏
  • 举报
回复
引用 3 楼 ilikeff8 的回复:
Application总能引用得到把 要不这样试下

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source=new Uri("Style/ButtonStyle.xaml")});
我这样写的 Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("Dictionary.xaml") }); 提示说无效URI
沫林 2019-01-14
  • 打赏
  • 举报
回复
引用 4 楼 groveer 的回复:
第一种方法:
Application.Current.Resources.MergedDictionaries.Add(
        Application.LoadComponent(new Uri("/Styles/Style.xaml", UriKind.Relative)) as ResourceDictionary);
第二种方法,需要先在App.xaml中加载资源字典:
Style = Application.Current.TryFindResource("MetroStyle") as Style;
MetroStyle为你写Style时设置的x:Key
第二种方法,怎么在app.xaml中加载资源字典呢?我说的那个自定义用户控件的类库里没有app.xaml,所以我要去main所在的类库的app.xaml里去引用,这样就不在同一命名空间了呀?
exception92 2019-01-14
  • 打赏
  • 举报
回复
hcyj.Style = FindResource("styleTabItemDefault") as Style;
-》放到Loaded事件中呢
在Windows系统,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS的经典DEMO,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大WPF项目必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程,赵老师带领你在WPF,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手“复活”。在课程,赵老师会详细讲解WPF和MVVM的各种技巧,让你从此爱上WPF+MVVM编程。

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧