[英]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.