簡體   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