数据触发器中的标记扩展

2024-02-21

为了翻译我的 WPF 应用程序,我使用了一个返回 Binding 对象的标记扩展。这允许我在应用程序运行时切换语言。我这样使用这个标记:

<TextBlock Text="{t:Translate 'My String'}" />"

我想通过数据触发器更改按钮文本:

<Button>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <!-- Custom control template, note the TextBlock formating -->
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid x:Name="ContentHolder">
                            <ContentPresenter TextBlock.Foreground="Red" TextBlock.FontWeight="Bold" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <!-- Custom text triggered by Data Binding... -->
            <Style.Triggers>
                <DataTrigger Binding="{Binding MessageRowButton}" Value="Retry">
                    <Setter Property="Button.Content" Value="{t:Translate Test}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding MessageRowButton}" Value="Acknowledge">
                    <Setter Property="Button.Content" Value="{t:Translate Test}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

这会导致以下异常:

无法在“Setter”类型的“Value”属性上设置“Binding”。 “绑定”只能在 DependencyObject 的 DependencyProperty 上设置。

好吧,这对我来说很有意义。我尝试在我的资源中定义 TextBlock 并使用{StaticResource MyResource}在数据触发设置器值中。但是当我这样做时,我的按钮的样式没有正确应用......

如何使用我的标记扩展并更改按钮上的文本而不破坏按钮内字符串样式的能力?


尝试返回标记扩展本身(this)如果目标(IProvideValueTarget.TargetObject) 是一个二传手。当样式应用于实际元素时,它将被重新评估。

public object ProvideValue(IServiceProvider serviceProvider)
{
    var pvt = service.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
    if (pvt.TargetObject is Setter)
        return this;

    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据触发器中的标记扩展 的相关文章

  • 如果在构造函数中初始化该属性,则似乎不会设置 XAML 绑定

    当属性在构造函数内初始化时 我遇到了控件模板内数据绑定的问题 这是展示案例 您也可以下载样品溶液 http www filehosting org file details 75794 WpfApplication5 zip 自定义控件1
  • 使用拇指移动变换后的控件会产生奇怪的行为

    当尝试使用拇指在画布上移动控件时 我遇到了奇怪的行为 当我将控件添加到画布并使用 Thumb DragDelta 事件来移动它时 一切看起来都很好 但是 当我对控件应用旋转变换时 拖动它是很奇怪的 控件开始围绕光标旋转 角度越大 圆圈越大
  • 处置 StreamResourceInfo.Stream

    I use StreamResourceInfo Stream to get BitmapImage来自资源 是否正确Close and Dispose使用后的流 我问这个问题是因为在内存分析器中 如果这样做我会收到错误 内存分析器表示已处
  • WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件

    我正在创建一个 32 位 WPF 应用程序 它需要在 WebBrowser 控件中显示创建的 PDF 在做的同时 WebBrowser Navigate new Url D TestPDF MyDocument pdf 它在 Adob e
  • WPF 中的数据绑定?

    我正在尝试在 WPF 中设置数据绑定 我有班级人员 它通过一个文本框进行更新 类似老式的 另一个文本框应该通过数据绑定镜像对人员对象的更改 它曾经是 type twoway 但抛出了xamlparse 异常 它不是这样工作的 点击显示 pe
  • 从模板绑定到 viewmodel 的属性

    我为我的 GameViewModel 创建了一个视图 我有一些像这样的xaml
  • C#/WPF:禁用 RichTextBox 的文本换行

    有谁知道如何禁用文本换行RichTextBox 例如 如果我有一个大字符串不适合窗口 RichTextBox将字符串中无法显示的部分放在新行中 我想禁用它 并使其仅通过使用Scrollbar 多谢 Cheers A RichTextBox
  • 带有 ObservableCollection 和动态过滤器的 Silverlight ListBox

    假设我有这门课 public class MyData public bool IsActive get set public String Data1 get set public String Data2 get set and an
  • 如何在MVVM中实现对话框架构

    我正在开发一个基于 PRISM 框架 Unity Container 的 WPF 4 0 MVVM 应用程序 我想知道在 mvvm 模式中实现对话框的最佳方法是什么 我计划在我的应用程序中使用相当多的东西 所以我想要一些可重用的东西 由于您
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 网格内的 ContentPresenter 可见性绑定不起作用?

    我有以下网格
  • 按钮的样式看起来像应用栏按钮

    是否可以通过更改样式来将 xaml 按钮标记设置为看起来像应用程序栏按钮 以及如何才能做到这一点 希望这可以帮助
  • 使 DataTemplate 可混合

    如何为 ViewModel 制作可混合的数据模板 可在表达式混合中设计 当我转到资源并尝试直接编辑数据模板时 我在绘图板上看到的只是一个空白矩形 这是因为 DataTemplate 没有绑定到任何东西 当然 我可以创建一个 UserCont
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 滚动到 ScrollViewer 末尾的最佳方法

    目前 当我添加新项目时 我让代码自动滚动到末尾的唯一方法如下 XAML
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite

随机推荐