我有這樣的命名風格如何根據targetTypes修改具有不同setter的傳統命名樣式?
<Style x:Key="validationSupport" TargetType="{x:Type Control}">
<Setter Property="Margin" Value="5,2,14,2" />
...OMISSIS...
<Style.Triggers>
...OMISSIS...
<DataTrigger Binding="{Binding DataContext.ActiveWorkspace.Editable, RelativeSource={RelativeSource AncestorType=Window}}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
我用它廣泛用於文本框,組合框,DatePickers等,所以我使用的TargetType超類所有這些元素,控制。
現在我想使用'Control'沒有的特定屬性來區分dataTrigger中的setter。似乎我必須用不同的名稱創建不同的樣式,每個樣式都需要區分每個targetType,但這樣我就必須在所有使用它的元素中更改樣式名稱。有沒有更聰明的方法來實現這一目標?我不想要去修改我擁有的每個xaml文件。第一個答案後
更新
我試圖把下面的制定者的datatrigger內:
<Setter Property="Background" Value="#FFECECF8" />
<Setter Property="CheckBox.IsEnabled" Value="False" />
<Setter Property="DatePicker.IsEnabled" Value="False" />
<Setter Property="ComboBox.IsEnabled" Value="False" />
<Setter Property="TextBox.IsReadOnly" Value="True" />
不幸的是,測試了奇怪的結果。 IsEnabled屬性也設置爲TextBoxes,儘管前綴應限制其應用程序CheckBoxes,DatePickers和ComboBoxes。
我最終的需求是讓一些控件內容不可更改,避免難以閱讀與禁用控件相關的顏色。從以前的研究中我瞭解到,改變「禁用」控件的顏色並不是一件容易的事,並且涉及控制模板的重新定義。所以我想應用IsReadOnly和Background的組合,但它不適用於上述問題。事實上,只有使用IsEnabled屬性才能使CheckBoxes,DatePickers和ComboBoxes不可更改。 我錯過了什麼嗎?
的解決方案看起來很簡單,我不能看到它應避免任何理由。你能澄清這一點嗎? – Filippo
首先,你有一個針對目標類型X的風格,它在目標類型Y上執行任何操作。只要它只是一種風格就可以管理,但是你可以很快發現自己正在爲其他風格執行操作,並且在幾個月內它變成了難以控制的混亂('爲什麼ListBoxItem的邊距改變?!')。其次,我不確定它不會泄漏內存 - 正如我所說的,這需要測試。 – XAMeLi