Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
C# 如何以编程方式指定样式_C#_Wpf_Xaml_Styles - Fatal编程技术网

C# 如何以编程方式指定样式

C# 如何以编程方式指定样式,c#,wpf,xaml,styles,C#,Wpf,Xaml,Styles,我正在尝试将我的一种xaml样式设置为我页面中的框架。 它在代码中创建,并动态分配给布局 所以我希望我必须动态地设置样式?因为该帧在xaml中不存在 我搞不懂的是如何分配自定义模板。或者更好的是,以一种全局的方式将其应用到适合某一类别的任何框架中。标签或类型等 下面是我尝试测试的模板。但它不起作用。假设代码丢失,所以开始检查codebehind样式设置,但到目前为止运气不佳 App.xaml 选项1: 为您的类型创建一个没有键(inplicit)的样式 在样式中添加ControlTemplate

我正在尝试将我的一种xaml样式设置为我页面中的框架。 它在代码中创建,并动态分配给布局

所以我希望我必须动态地设置样式?因为该帧在xaml中不存在

我搞不懂的是如何分配自定义模板。或者更好的是,以一种全局的方式将其应用到适合某一类别的任何框架中。标签或类型等

下面是我尝试测试的模板。但它不起作用。假设代码丢失,所以开始检查codebehind样式设置,但到目前为止运气不佳

App.xaml


选项1:

  • 为您的类型创建一个没有键(inplicit)的样式
  • 在样式中添加ControlTemplate
  • 当您添加控件(甚至是从代码中添加)时,它将获得您刚才创建的默认样式
  • 代码Ex,带有从包含窗口获取历史样式的按钮:

    <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:

  • 为您的类型创建一个没有键(inplicit)的样式
  • 在样式中添加ControlTemplate
  • 当您添加控件(甚至是从代码中添加)时,它将获得您刚才创建的默认样式
  • 代码Ex,带有从包含窗口获取历史样式的按钮:

    <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;