如何以编程方式分配样式

时间:2016-11-07 16:33:08

标签: c# wpf xaml styles

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

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

我无法弄清楚的是,如何分配自定义模板。或者更好的是,以全局方式适应任何适合某一类别的帧。标记或输入等。

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

的App.xaml

<!-- http://paulstovell.com/blog/wpf-navigation -->
<ControlTemplate TargetType="Frame" x:Key="frame" >
    <DockPanel Margin="7">
        <StackPanel 
            Margin="7"
            Orientation="Horizontal"
            DockPanel.Dock="Top"
            >
                <Button 
                Content="Avast! Go back!" 
                Command="{x:Static NavigationCommands.BrowseBack}" 
                IsEnabled="{TemplateBinding CanGoBack}" 
                />
                <Button 
                Content="Forward you dogs!" 
                Command="{x:Static NavigationCommands.BrowseForward}" 
                IsEnabled="{TemplateBinding CanGoForward}" 
                />
            </StackPanel>

            <Border 
            BorderBrush="Green"
            Margin="7"
            BorderThickness="7"
            Padding="7"
            CornerRadius="7"
            Background="White"
            >
            <ContentPresenter />
        </Border>
    </DockPanel>
</ControlTemplate>

MyWindow.xaml.cs

 Frame newFrame = new Frame();
 newFrame.Content = content;

 newFrame.Template = ControlTemplate ...?

1 个答案:

答案 0 :(得分:3)

选项1:

  1. 为您的类型
  2. 创建没有键(隐含)的样式
  3. 在样式中添加ControlTemplate
  4. 当您添加控件(甚至是代码)时,它将获得您刚刚创建的默认样式
  5. Code Ex,带有一个从包含窗口获取hist样式的按钮:

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

    从代码后面创建按钮:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            var button = new Button();
            this.Content = button;
        }
    }
    

    选项2:

    1. 使用键创建样式。
    2. 在样式中添加ControlTemplate
    3. 将样式添加到App资源。
    4. 从应用程序获取样式并设置样式(和模板):
    5. 代码例:

      var yourStyle = (Style)Application.Current.Resources["Resource_Name"]);
      
      Frame newFrame = new Frame();
      
      newFrame.Style = yourStyle;