【问题标题】:WPF C# Programmatically adding Styles from Resource Dictionary?WPF C# 以编程方式从资源字典中添加样式?
【发布时间】:2014-12-06 14:05:09
【问题描述】:

我是这个网站的新手和编程新手,我遇到了一个问题。 我正在使用 Visual Studio 2010,C# WPF 应用程序。

我的程序中有这行代码:

    TextBlock.Inlines.Add
                  (new Run("text"){ Foreground = Brushes.Blue, FontWeight = FontWeights.ExtraBold });

这条线没有任何问题,但我已经用这些设置器制作了一个资源字典,我不确定如何以编程方式为每一行使用它。我尝试了这样的事情,但它没有做任何事情:

TextBlock.Inlines.Add
             (new Run("text") { Style = (Style)this.Resources["bluebold"] });

我认为问题可能是我没有调用代码中称为“Styles.xaml”的资源字典,我不确定如何执行此操作。

【问题讨论】:

    标签: c# wpf styles resourcedictionary inlines


    【解决方案1】:

    是否有必要从代码中更改它?触发器或样式选择器有很多方法

    这是您可以用来更改代码内部样式的代码:

    MainWindow.xaml

    <Window x:Class="StylesFromResourceExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="RunStyle1" TargetType="{x:Type Run}">
            <Setter Property="Foreground" Value="Blue"/>
            <Setter Property="FontWeight" Value="ExtraBold"/>
        </Style>    </Window.Resources>
    <Grid>
        <TextBlock x:Name="txtBlock" HorizontalAlignment="Left" Text="TextBlock" VerticalAlignment="Top" Height="20" Width="142" />
        <Button Width="100" Height="30" Content="Change" Click="Button_Click" />
    </Grid>
    </Window>
    

    MainWindow.xaml.cs

    using System.Windows;
    
    namespace StylesFromResourceExample
    {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            txtBlock.Inlines.Add(new Run("New Text") { Style = (Style)this.FindResource("RunStyle1") });
        }
    }
    }
    

    如果它对你有用,请告诉我。

    【讨论】:

    • 我有多个按钮可以将不同颜色的文本添加到文本块中,这就是为什么我需要以编程方式使用它,据我了解,您提供的代码将文本块中的所有样式更改为一种样式.我尝试使用 TextBlock.Inlines.Add(new Run("text") { Style = (Style)this.FindResource("stylename") });但它给了我一个错误:'TextBlock' TargetType 与元素'Run'的类型不匹配。
    • 好的,我更改了资源的样式和名称...试试这个
    • 是的,让 T​​argetType 运行使它工作!非常感谢! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多