- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 Window
类,其中我有几个 TextBlock
元素,它们应该通过 的值接收
属性。第一个“Converter binding”工作正常并且可以完成预期的一切。今天我尝试用另一个用于它的 Background
颜色绑定(bind)Converter
实现另一个“Converter binding”,但它不起作用:
(我省略了 ConvertBack
方法,因为它们在这里不是必需的):
namespace InsightTool.Gui.Helper {
[ValueConversion(typeof(double), typeof(Brush))]
public class AverageExecutionTimeToColorConverter : IValueConverter {
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
double val;
double.TryParse(value.ToString(), out val);
if (val >= 10000) {
return Brushes.Red;
} else if (val >= 5000) {
return Brushes.Orange;
} else {
return Brushes.Green;
}
}
}
[ValueConversion(typeof(int), typeof(Brush))]
public class ThreadsAvailableCountToColorConverter : IValueConverter {
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
int val;
int.TryParse(value.ToString(), out val);
if (val < 100) {
return Brushes.Red;
} else if (val < 200) {
return Brushes.Orange;
} else if (val < 500) {
return Brushes.Yellow;
} else {
return Brushes.Green;
}
}
}
}
在 Window
类中,我使用了如下两个转换:
<Window ...
x:Name="Main"
xmlns:Base="clr-namespace:InsightTool.Gui.Helper">
<Window.Resources>
<Base:ThreadsAvailableCountToColorConverter x:Key="ThreadsAvailableCntConverter"/>
<Base:AverageExecutionTimeToColorConverter x:Key="AvgExecutionTimeConverter"/>
</Window.Resources>
<!-- This one works fine-->
<TextBlock Width="10" Height="10" VerticalAlignment="Center" Background="{Binding ExecutionTimeAverage, Converter={StaticResource AvgExecutionTimeConverter}, ElementName=UCExecutionTimes}"/>
<!-- This one does not work-->
<TextBlock Width="10" Height="10" VerticalAlignment="Center" Background="{Binding ThreadsAvailableCount, Converter={StaticResource ThreadsAvailableCntConverter}, ElementName=Main}"/>
</Window>
DependencyProperties
声明:
public partial class UserControlExecutionTimes : UserControl {
public static readonly DependencyProperty ExecutionTimeAverageProperty =
DependencyProperty.Register("ExecutionTimeAverage", typeof(double), typeof(MainWindow), new FrameworkPropertyMetadata(double));
public double ExecutionTimeAverage {
get { return (double)GetValue(ExecutionTimeAverageProperty); }
set { SetValue(ExecutionTimeAverageProperty, value); }
}
}
public partial class MainWindow : Window {
public static readonly DependencyProperty ThreadsAvailableCountProperty = DependencyProperty.Register("ThreadsAvailableCount", typeof(int),
typeof(MainWindow), new FrameworkPropertyMetadata(int));
public int ThreadsAvailableCount {
get { return (int)GetValue(ThreadsAvailableCountProperty); }
set { SetValue(ThreadsAvailableCountProperty, value); }
}
}
两个 DependencyProperties
都已正确设置,并且它们的值显示在 GUI 中。我在这里想念什么?
编辑:
我还测试了以下内容:
<Window>
<!-- This one works fine-->
<TextBlock Width="10" Height="10" VerticalAlignment="Center" Background="{Binding ThreadsAvailableCount, Converter={StaticResource AvgExecutionTimeConverter}, ElementName=Main}"/>
<!-- This one does not work-->
<TextBlock Width="10" Height="10" VerticalAlignment="Center" Background="{Binding ThreadsAvailableCount, Converter={StaticResource ThreadsAvailableCntConverter}, ElementName=Main}"/>
</Window>
似乎 Binding
消耗"new"转换器的返回值有问题,但我不知道为什么。
EDIT2
我用 Snoop 检查绑定(bind),结果如下:
工作转换器绑定(bind)的 background
属性如下所示:
但是无效转换器绑定(bind)的 background
属性看起来是这样的:
ThreadsAvailableCount
设置正确的另一个证明(绑定(bind)到 Textblock
):
显示ThreadsAvailableCountToColorConverter
的返回值越来越像是一个错误。这是因为在 Debug模式下,它会在 ThreadsAvailableCountToColorConverter
的 Convert
方法中的断点处停止。它甚至成功地到达了Convert
方法中的return
。
最佳答案
啊!终于解决了这个问题。我有同样的问题。使用 TextBlock
,使用 IValueConverter
将转换为 Brush
。
绑定(bind)有效,没有错误或输出。该值正在进入 IValueConverter
代码,我可以直接调试到 return 语句然后......什么都没有!
您所做的一切都是正确的,但是您自动导入了错误的Brushes
。我一直使用 WPF 来做这件事。
替换using语句:
using System.Drawing
与:
using System.Windows.Media
WPF 使用 System.Windows.Media.Brushes
,但是 非常 很容易导入几乎相同的 System.Drawing.Brushes
而不是注意。一切看起来都很好,直到 WPF 掌握它并且不能实际使用它。但它通过退回到默认颜色而“优雅地”失败。
关于c# - WPF:ValueConverter (IValueConverter) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39918156/
有没有一种方法可以在不在资源中定义的情况下使用 ValueConverter?因为语法非常冗长。 最佳答案 您可以使用 MarkupExtension 来最小化所需的 xaml 代码量。例如: pub
使用 Silverlight 4,我试图在我的 UserControl 的资源部分中初始化一个转换器,并引用我的控件中的一个对象。当我尝试运行应用程序时出现此异常,注意实际 XAML 文件中的第 16
我有一个绑定(bind)到集合的组合框。集合中的每个项目都有一个可能包含也可能不包含项目的子集合。我有第二个组合框,子集合绑定(bind)到该组合框。如果子集合有项目,我只想显示 (=Visibili
在与 Binding 一起使用的 Converter 中,有些东西我无法理解。 :-( 我用 Mvvm-Light 创建了一个简单的例子...... 这里是完整的解决方案:https://testbi
应该实现两个函数,我想知道我需要对输入进行哪种类型的验证以及如何管理错误。 Public Function Convert(ByVal value As Object, ByVal targetTyp
是否可以将 ValueConverter 与内联一起使用?我需要将 ListBox 中每一行的某些部分加粗。 它编译但我得到:不能在“Inl
我正在使用 MVVM,以防万一。 我的 MainWindowViewModel 有两个 DependencyProperties,TheList 和 TheSelectedItem。 TheList
我正在尝试根据单元格的值所属的 ObservableCollection 中的最小值或最大值来更改数据网格单元格的颜色。 现在我有以下数据网格和样式模板:
为什么我的 ValueConverter 没有被触发? 当我的 View 模型的构造函数被执行时,我的值转换器被触发。但是,当我为 Cells 属性分配新值时,它不会被触发。 我希望这一行能够触发我的
关于Nerd Plus Art今天的博客,有一篇关于为箭头创建WPF资源的帖子,作者经常使用。我有一个带有后退和前进按钮的辅助项目,所以我认为向左和向右箭头在这些按钮上效果很好。 我将 LeftArr
我想采用以下 ValueConverter 并使其可重用于许多 View 。 export class ProductFilterValueConverter { toView(array,
我有一个 ValueConverter 用于在 StoryBoard 动画中绑定(bind)“To”值,类似于答案 - WPF animation: binding to the “To” attri
我正在尝试将 @string/something 传递给一个值转换器,以便我可以使用它来格式化输出,假设我有一个 DateTime 值,我想将类似 "Signup Date: {0}" 的内容传递给
我一直在 WPF 中使用 Singleton 值转换器。但最近我和一位同事发生了争执,他说使用 valueconverters 的单例实例是不好的,因为它们只会被应用程序域卸载处理。他建议单例转换器可
我有值转换器,它可以在控件的文本是否以 http 开头时转换控件的可见性方面。下面是代码。 public class HTTPVisibilityConverter : IValueConverter
在我的 Grails 2.3.7 应用程序中,我有以下命令对象 class UpdateThresholdsCommand { Double threshold_1 Double th
假设您有一个用户选择列表。根据用户所做的选择,其他选择可能不再可用。 我有一个 ValueConverter 可以处理这个问题。如果它知道进行了哪些选择,它将返回一个值,指示正在转换的项目是否仍然可选
我有一个 Window 类,其中我有几个 TextBlock 元素,它们应该通过 的值接收 Background 颜色绑定(bind) 属性。第一个“Converter binding”工作正常并且可
有没有办法让 WPF 自动将 Converter 应用于特定类型的所有绑定(bind)? 我看过 this question , 但它涵盖了不同的情况(本地化),因此没有令人满意的答案。 我的问题:我
我正在尝试编写一个值转换器,用于将 WPF ToggleButton 的 Boolean IsChecked 属性绑定(bind)到我的模型中的非 bool 值(恰好是 double 值)。我编写的转
我是一名优秀的程序员,十分优秀!