我正在處理WPF表單設計器,您可以在其中將標籤,文本框,組合框等控件拖放到設計表面,然後通過屬性網格用戶可以爲每個控件設置數據綁定。我有一個要求,顯示那些沒有給定屬性綁定集的控件的紅色背景。基於DependencyProperty綁定的WPF樣式DataTrigger
我最初的想法是創建一個HasBindingConverter,它將調用調用元素本身並檢查它是否綁定到某個屬性。在這種情況下TextBox.TextProperty
public class HasBindingConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
FrameworkElement fe = value as FrameworkElement;
if(fe != null)
{
Binding binding = BindingOperations.GetBinding(fe, TextBox.TextProperty);
return binding != null;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
然後,我添加關聯到TextBox控件類型,我的形式的參考資料部分樣式這是一個用戶控件:
<UserControl.Resources>
<Style TargetType="TextBox">
<Style.Resources>
<Converters:HasBindingConverter x:Key="HasBindingConv"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger
Binding="{Binding,
RelativeSource={RelativeSource Self},
Converter={StaticResource HasBindingConv}}"
Value="False">
<Setter Property="TextBox.Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource Self},
Converter={StaticResource HasBindingConv}}"
Value="True">
<Setter Property="TextBox.Background" Value="White" />
</Style.Triggers>
</Style>
所以,如果文本框沒有數據綁定集對於TextBox.TextProperty,它會將其背景設置爲紅色。這部分工作正常,問題是當用戶爲此控件設置TextBox.TextProperty綁定時,我的Converter不再被調用,所以背景保持紅色。
任何人都知道如何在設置此控件的綁定後調用觸發器?或者其他任何建議,我可能會以錯誤的方式來解決問題。
謝謝!
謝謝對於這個建議,現在我需要何時/何時調用步驟1和3? –
步驟1當我放棄我的控制和第3步後,我設置綁定? –
我認爲這是工作!我會稍微等一下,看看別人是否有其他建議,但你的方式似乎清晰和簡單。 @ WPF-it –