C# 如何以编程方式指定样式
我正在尝试将我的一种xaml样式设置为我页面中的框架。 它在代码中创建,并动态分配给布局 所以我希望我必须动态地设置样式?因为该帧在xaml中不存在 我搞不懂的是如何分配自定义模板。或者更好的是,以一种全局的方式将其应用到适合某一类别的任何框架中。标签或类型等 下面是我尝试测试的模板。但它不起作用。假设代码丢失,所以开始检查codebehind样式设置,但到目前为止运气不佳 App.xamlC# 如何以编程方式指定样式,c#,wpf,xaml,styles,C#,Wpf,Xaml,Styles,我正在尝试将我的一种xaml样式设置为我页面中的框架。 它在代码中创建,并动态分配给布局 所以我希望我必须动态地设置样式?因为该帧在xaml中不存在 我搞不懂的是如何分配自定义模板。或者更好的是,以一种全局的方式将其应用到适合某一类别的任何框架中。标签或类型等 下面是我尝试测试的模板。但它不起作用。假设代码丢失,所以开始检查codebehind样式设置,但到目前为止运气不佳 App.xaml 选项1: 为您的类型创建一个没有键(inplicit)的样式 在样式中添加ControlTemplate
选项1:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
<Setter Property="Template">
<ControlTemplate>
<... Your Template ...>
</ControlTemplate>
</Setter>
</Style>
</Window.Resources>
<Grid>
</Grid>
</Window>
选项2:
var yourStyle = (Style)Application.Current.Resources["Resource_Name"]);
Frame newFrame = new Frame();
newFrame.Style = yourStyle;
选项1:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
<Setter Property="Template">
<ControlTemplate>
<... Your Template ...>
</ControlTemplate>
</Setter>
</Style>
</Window.Resources>
<Grid>
</Grid>
</Window>
选项2:
var yourStyle = (Style)Application.Current.Resources["Resource_Name"]);
Frame newFrame = new Frame();
newFrame.Style = yourStyle;
看看另一个主题,非常相似:为什么要动态创建东西?你在努力工作,让事情变得更加困难。@EdPlunkett作为背景,我使用的是Devexpress控件。DockPanel。这需要我为每个页面添加一个面板。每个面板都需要它的内容,但我希望有导航。因此,我将向面板添加一个框架,并将内容添加到框架中。页面本身有自己的xaml和cs。不幸的是,devexpress没有设置导航窗口的样式,所以我需要覆盖它。我午餐带了一个火腿三明治,但我把西红柿和泡菜片放在一个拉链包里,这样面包就不会湿透了。外面天气晴朗。有点冷。但是每年的这个时候都要关注PAR。看看这个话题,这很相似:为什么要动态地创建东西?你在努力工作,让事情变得更加困难。@EdPlunkett作为背景,我使用的是Devexpress控件。DockPanel。这需要我为每个页面添加一个面板。每个面板都需要它的内容,但我希望有导航。因此,我将向面板添加一个框架,并将内容添加到框架中。页面本身有自己的xaml和cs。不幸的是,devexpress没有设置导航窗口的样式,所以我需要覆盖它。我午餐带了一个火腿三明治,但我把西红柿和泡菜片放在一个拉链包里,这样面包就不会湿透了。外面天气晴朗。有点冷。但是每年大约这个时候,谢谢。我已经让它与类似的代码工作。要获取
ControlTemplate
,然后使用它设置newFrame.Template
。太好了,我认为我建议的第一个选项(选项1)更好更干净。谢谢。我已经让它与类似的代码工作。要获得ControlTemplate
,然后使用它设置newFrame.Template
。太好了,我认为我建议的第一个选项(选项1)更好更干净。
var yourStyle = (Style)Application.Current.Resources["Resource_Name"]);
Frame newFrame = new Frame();
newFrame.Style = yourStyle;