[英]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
)。 我将此Grid
与Ui_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 点解决了
我可能不会给出确切的答案,因为原始问题中没有足够的细节。
您在 Window 中显示的元素记录在属性public UIElement Ui_Element
?
如果是这样,则将属性类型更改为public FrameworkElement Ui_Element
,因为 Style 和 DataContext 属性是在 FrameworkElement 上定义的,而不是在 UIElement 上定义的。
如果它是较窄的类型(例如,在您的示例中始终是 Shape ),那么最好指定这种较窄的类型。
如果您显示的样式是 Ui_Element 属性中元素的样式,那么将 Sensor 传递到该元素的 Data Context 中就足够了。
示例: sensor.Ui_Element.DataContext = sensor;
.
您在 Sharpe 上创建 UI 元素非常徒劳。 WPF的核心语言是XAML。 在非常罕见、相当困难的情况下,值得使用 Sharp 代替。 在大多数情况下,XAML 解决方案将比 Sharpe 更简单、更典型、更易于理解。
在您的情况下,您应该创建一个没有 Ui_Element 属性的传感器集合。 为 Sensor 创建一个模板选择器,通过 Type 属性设置其视觉外观。 在 XAML 中,为此集合设置 ItemsControl 并为其提供模板选择器。
此外还有其他几个典型的 WPF 实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.