【问题标题】:Change style based on property value根据属性值更改样式
【发布时间】:2021-05-28 15:19:46
【问题描述】:

在主窗口的Canvas 上,我正在绘制一些传感器。

我创建了“传感器”类

public class Sensor
{
    public int Id_Sens { get; set; }    
    public int Type { get; set; }
    public UIElement Ui_Element { get; set; }
}

我以编程方式创建了一个带有两列的Grid(一个具有相同宽度和高度的Rectangle(-> 变成一个正方形),在第一个中具有以下样式,在第二个中具有Label) .我将此GridUi_Element 相关联(Ui_Element = gridMain)。

这很好用。

根据属性Type的值,我想改变Rectangle的半径(并画一个圆)

我创建了以下 XAML

<Style x:Key="Sens_Shape" TargetType="{x:Type Rectangle}">
    <Setter Property="Stroke" Value="Black"/>
    <Setter Property="StrokeThickness" Value="1"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Type}" Value="0">
            <Setter Property="RadiusX" Value="60"/>
            <Setter Property="RadiusY" Value="60"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

如何将Sensor 类的属性Type 绑定到触发器?

编辑 我用 EldHasp 的第 1 点和第 3 点解决了

【问题讨论】:

  • 对于将属性绑定到DataTrigger,您的代码看起来是正确的。但是矩形不是圆形,因此不清楚为什么要在不具有这些属性的对象上设置 RadiusXRadiusY 值。请通过提供正确的minimal reproducible example 来改进您的问题,并详细说明该代码的作用、与您想要的有何不同以及具体您需要什么帮助。
  • 我忘了告诉矩形具有相同的宽度和高度(所以它是一个正方形)如果我设置 RadiusX = 60 e RadiusY = 60 它变成一个圆圈在我的 WPF 作品中如果我强制使用这些值,请圈出。问题是绑定
  • 为数据上下文的属性创建绑定。但是根据您的解释,不清楚您如何创建 UI 元素、布局它们、它们的数据上下文是什么,以及它与原始传感器的集合有何关系。在问题的解释中添加详细信息。

标签: c# wpf xaml data-binding


【解决方案1】:

我可能不会给出确切的答案,因为原始问题中没有足够的细节。

  1. 您在窗口中显示的元素记录在属性public UIElement Ui_Element?
    如果是这样,请将属性类型更改为 public FrameworkElement Ui_Element,因为 Style 和 DataContext 属性是在 FrameworkElement 上定义的,而不是在 UIElement 上。

  2. 如果它是较窄的类型(例如,在您的示例中始终为 Shape),那么最好指定这种较窄的类型。

  3. 如果你显示的样式是Ui_Element属性中元素的样式,那么将Sensor传入该元素的Data Context就足够了。
    示例:sensor.Ui_Element.DataContext = sensor;

  4. 您在 Sharpe 上创建 UI 元素是徒劳的。 WPF 的核心语言是 XAML。在非常罕见、相当困难的情况下,值得使用 Sharp 代替。 在大多数情况下,XAML 解决方案将比 Sharpe 更简单、更典型、更易于理解。
    在您的情况下,您应该创建一个没有 Ui_Element 属性的传感器集合。 为传感器创建一个模板选择器,通过 Type 属性设置其视觉外观。 在 XAML 中,为此集合设置 ItemsControl 并为其提供模板选择器。
    除此之外,还有其他几个典型的 WPF 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2013-04-03
    • 1970-01-01
    • 2018-08-26
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多