繁体   English   中英

根据属性值更改样式

[英]Change style based on property value

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

我创建了 class “传感器”

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>

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

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

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

  1. 您在 Window 中显示的元素记录在属性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 属性的传感器集合。 为 Sensor 创建一个模板选择器,通过 Type 属性设置其视觉外观。 在 XAML 中,为此集合设置 ItemsControl 并为其提供模板选择器。
    此外还有其他几个典型的 WPF 实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM