在WPF中,是否可以将“{StaticResource key}”中的键绑定到变量。

例如。 我有一个变量ExecutionState ,状态为ActiveCompleted

在我的ResourceDictionary中

<Style TargetType="{x:Type TextBlock}" x:Key="Active">
        <Setter Property="Foreground" Value="Yellow"/>
    </Style>
    <Style TargetType="{x:Type TextBlock}" x:Key="Completed">
        <Setter Property="Foreground" Value="Green"/>
    </Style>

而不是拥有

<TextBlock Style="{StaticResource Active}"/>

我想有类似的东西

<TextBlock Style="{StaticResource {Binding ExecutionState}}"/>

因此,如果状态改变文本颜色的变化。 这样的事情甚至可能吗? 我可以使用触发器实现所需的功能,但我必须在多个地方重用它,我不想让我的代码混乱。 我也在使用MVVM。

感谢名单

===============>>#1 票数:0

不,这是不可能的。 绑定只能在DependencyProperty上设置。 StaticResource不是DependencyObject,因此没有DependencyProperty。 您应该使用Trigger(s)或开发自己的附加行为。

===============>>#2 票数:0

没有直接的方法来实现。 创建一个附加属性并将属性名称指定给bind。 在属性更改回调函数更新控件样式。

<TextBlock  dep:CustomStyle.StyleName="{Binding ExecutionState}"    Text="Thiru"        />


public static  class CustomStyle
{
    static FrameworkPropertyMetadata _styleMetadata = new FrameworkPropertyMetadata(
                                     string.Empty, FrameworkPropertyMetadataOptions.AffectsRender, StyleNamePropertyChangeCallBack);

    public static readonly DependencyProperty StyleNameProperty =
        DependencyProperty.RegisterAttached("StyleName", typeof (String), typeof (CustomStyle), _styleMetadata);

    public static void SetStyleName(UIElement element, string value)
    {
        element.SetValue(StyleNameProperty, value);
    }
    public static Boolean GetStyleName(UIElement element)
    {
        return (Boolean)element.GetValue(StyleNameProperty);
    }


    public static void StyleNamePropertyChangeCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {

        FrameworkElement ctrl = d as FrameworkElement;

        if (ctrl.IsLoaded)
        {

            string styleName = Convert.ToString(e.NewValue);
            if (!string.IsNullOrEmpty(styleName))
            {
                ctrl.Style = ctrl.TryFindResource(styleName) as Style;
            }
        }
    }
}

  ask by SneakyPeet translate from so

未解决问题?本站智能推荐:

2回复

如何在静态资源上设置依赖项属性?

我试图解决这个事实,即我无法为ConverterParameter指定动态值。 请参阅我的另一个问题,为什么我需要将动态值绑定到ConverterParameter - 我不喜欢当前发布的解决方案,因为它们都需要我认为应该对View模型进行不必要的更改。 为了解决这个问题,我创建了一个自
1回复

WPF设置程序属性未从StaticResource获取绑定

我有一堆ListBoxItems,并且希望能够在右键单击它时将其删除。 因此,我有一个上下文菜单声明为静态资源,并且该资源被用作ListBoxItem样式的Setter属性之一: 使用此代码,当我右键单击ListBoxItem时,菜单显示就很好了: 但是,单击每个菜单项(“
1回复

WPF数据绑定到对象的属性

我将对象的属性绑定到控件,但该属性不会更新... 我以这种方式尝试过: ViewModelBase: ViewModel: 人物类: App.xamls.cs 主窗口: 程序启动时,文本框的值就是联系人对象的值,但是如果我更改文本框的文本值,该
1回复

wpf c#数据绑定以使用viewModel对象的属性设置字符串

我试图解决这个问题很多小时: 我有一个名为NewMazeGrid的网格用户自定义控件,我想将其用作MainWindow的控件。 MainWindow包含MazeViewModel (mazeVM成员)。 当属性MazeViewModel:MySingleplay更改时,我尝试设置网
1回复

DataGridCheckBoxColumn IsReadOnly属性绑定

我想在每个行的datagrid中启用/禁用复选框列,具体取决于集合中的值。 我有一个名为AccountComponents的ObservableCollection,它是一个名为AccountComponent的类的集合,它有一个名为Enabled的布尔属性。 我已经尝试将Enabled属性
3回复

WPF数据绑定与ViewModel作为属性

为了保持MainWindow.xaml.cs的清洁,我尝试将所有内容外包给ViewModel类,然后将视图绑定到ViewModel属性的属性 但是,使用此额外的层似乎无效。 我的列表和文本框保持空白。 有什么办法可以使这种方法起作用? MainWindow类: ViewMo
2回复

绑定到WPF中的另一个绑定

在一个简单的MVVM应用程序中,我可以向视图中的某些属性添加绑定。 该属性可以访问另一个对象并从中返回一个属性值。 假设我要在视图中显示活动项目。 如果没有活动的项目,则应显示一个特别说明。 现在,重命名项目后,应在视图中更新名称。 如果我只是在属性中返回了项目的名称,那么它当然不
1回复

将列表属性绑定到TextBlock

我有一个名为MyClass的类,它看起来像这样: MyClassTranslation看起来像这样: 我有一个视图和一个视图模型。 View模型如下所示: 这是视图: 问题是未显示myClassName属性。 如何绑定它?
2回复

将SelectedItems绑定到ObservableCollection属性

为什么SelectedItems不能从XAML绑定?!..如何保持MVVM模式应用它?
1回复

UserControl中的依赖项属性绑定

我的解决方案是在MVVM中实现的。 该视图是一个承载用户控件的窗口。 我为此用户控件创建了一个依赖项属性,如下所示: 此属性绑定到xaml中的viewmodel属性(ListOfItems): 我也已经在viewmodel的代码后面初始化了窗口的datacontext。 问