c# - WPF:是否有资源更改触发的事件

标签 c# wpf winforms resourcedictionary

有没有办法在特定 WPF 资源的值更改时得到通知?

我们需要在 WPF 应用程序中动态调整内容字体大小...对于 WPF 控件,我们将 Control.FontSize 设置为动态资源,字体会自动调整大小。不幸的是,我们还有一个嵌入式 winforms 控件,无法以这种方式设置字体大小。这个想法是订阅每个资源值更改时触发的事件,并实现 winforms 控件的自定义刷新。有什么建议吗?

提前致谢!

最佳答案

所以,

在考虑了所有可能的方法之后,我引入了一种新行为,即在每次更改特定 WPF 资源时触发一个事件。

可以从https://github.com/jeromerg/ResourceChangeEvent 下载或克隆源代码.

public class ResourceChangeNotifierBehavior 
  : System.Windows.Interactivity.Behavior<FrameworkElement>
{
    public static readonly DependencyProperty ResourceProperty 
            = DependencyProperty.Register("Resource", 
                   typeof(object),
                   typeof(ResourceChangeNotifierBehavior),
                   new PropertyMetadata(default(object), ResourceChangedCallback));

    public event EventHandler ResourceChanged;

    public object Resource
    {
        get { return GetValue(ResourceProperty); }
        set { SetValue(ResourceProperty, value); }
    }

    private static void ResourceChangedCallback(DependencyObject dependencyObject,
                                                DependencyPropertyChangedEventArgs args)
    {
        var resourceChangeNotifier = dependencyObject as ResourceChangeNotifierBehavior;
        if (resourceChangeNotifier == null)
            return;

        resourceChangeNotifier.OnResourceChanged();
    }

    private void OnResourceChanged()
    {
        EventHandler handler = ResourceChanged;
        if (handler != null) handler(this, EventArgs.Empty);
    }
}

以便事件处理程序 OnResourceChanged 可以挂接到 XAML 文件中,如下所示:

<i:Interaction.Behaviors>
    <Behaviours:ResourceChangeNotifierBehavior 
                Resource="{DynamicResource MyDynamicResourceKey}"
                ResourceChanged="OnResourceChanged"/>
</i:Interaction.Behaviors>

希望,它能帮助...

关于c# - WPF:是否有资源更改触发的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841575/

相关文章:

c# - 序列化 WPF DataTemplates 和 {Binding Expressions}(来自 PowerShell?)

c# - gridview 中的 cellendedit 事件在另一个 gridview 中添加行?

c# - super 慢的 C# 自定义控件

c# - 需要 CaSTLe.Windsor 作为 Asp.Net MVC ControllerFactory 的帮助

c# - 打开项目时出现 "C# 2017 compiler could not be created"错误信息

c# - 从更新面板写入文本框

wpf - 在WPF(3.5sp1)中以编程方式设置ComboBox SelectedItem

c# - 更新 silverlight 中的属性绑定(bind)

c# - 如何禁用 MenuStrip MaximizeBox

c# - 如何在 DataGridView C# 中合并特定的列标题?