根据 属性 值更改样式
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
具有相同的 WIDTH 和 HEIGHT(-> 成为一个正方形),具有以下样式,在第一个和 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 解决方案将比夏普更简单、更典型、更易于理解。
在您的情况下,您应该创建一个没有 Ui_Element 属性 的传感器集合。
为传感器创建一个模板选择器,通过类型 属性,它将设置其视觉外观。
在 XAML 中,为此集合设置 ItemsControl 并为其提供模板选择器。
此外还有其他几个典型的 WPF 实现。
在主要 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
具有相同的 WIDTH 和 HEIGHT(-> 成为一个正方形),具有以下样式,在第一个和 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 解决方案将比夏普更简单、更典型、更易于理解。
在您的情况下,您应该创建一个没有 Ui_Element 属性 的传感器集合。 为传感器创建一个模板选择器,通过类型 属性,它将设置其视觉外观。 在 XAML 中,为此集合设置 ItemsControl 并为其提供模板选择器。
此外还有其他几个典型的 WPF 实现。