WPF INotifyDataErrorInfo RelativeSource FindAncestor
2017-01-08T00:15:05+01:00
2017-01-08T20:40:37+01:00
2022-08-10T11:45:33+02:00
FBS
Az INotifyDataErrorInfo használatát építem a WPF Validation - using INotifyDataErrorInfo - CodeProject alapján.

Minden szépen működik, de bővítettem egy "Warning Rectangle" ikonnal a hibaüzenetet.
Ennek az 'ikonnak' szeretném a ToolTip szövegét a TextBox szövegéből kinyerni.
Erre "{RelativeSource FindAncestor"-t szeretnék használni, de sehogy sem kapom meg.
Próbáltam rengeteg AncestorType-t és AncestorLevel-t, de nem jövök rá a megoldásra.

Valaki tud segíteni?

<ResourceDictionary x:Class="eMeL.WPF.XAMLDictionaries.StyleDictionary_INotifyDataErrorInfo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="../XAMLIconSets/BrushSet1.xaml" /> </ResourceDictionary.MergedDictionaries> <!-- TextBox =========================================================================- --> <!-- https://www.codeproject.com/tips/876349/wpf-validation-using-inotifydataerrorinfo --> <Style x:Key="TextBox_NotifyDataErrorInfo" TargetType="{x:Type TextBox}"> <Setter Property="Validation.ErrorTemplate"> <Setter.Value> <ControlTemplate x:Name="TextErrorTemplate"> <DockPanel LastChildFill="True"> <AdornedElementPlaceholder> <Border BorderBrush="Red" BorderThickness="2"/> </AdornedElementPlaceholder> <Rectangle Name="ValidationTextBoxErrorTemplateWarningRectangle" Fill="{StaticResource WarningBrush}" Width="20" Height="20" MouseDown="ValidationTextBoxErrorTemplateWarningRectangle_MouseDown" ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}" /> </DockPanel> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"> </Setter> </Trigger> </Style.Triggers> </Style>
Mutasd a teljes hozzászólást!
Huh, nem volt könnyű kisilabizálni, mit akarsz, egy működő példaprojectet mellékelhettél volna.

Érdekes probléma, én sem tudtam elérni a megfelelő property-t, viszont workaround-ként használhatod ezt:

ToolTip="{Binding [0].ErrorContent}"
Azaz mindkét ToolTip-et külön kötöd hozzá az ErrorContent-hez, nem egyik ToolTip-ed szeded a másiktól. Szerintem ennyi redundancia belefér.

Teljes sor:

<Rectangle Name="ValidationTextBoxErrorTemplateWarningRectangle" Fill="{StaticResource WarningBrush}" Width="20" Height="20" MouseDown="ValidationTextBoxErrorTemplateWarningRectangle_MouseDown" ToolTip="{Binding [0].ErrorContent}" />

A tipp innen, némi magyarázattal körítve. Ez elég haladó téma.
Mutasd a teljes hozzászólást!

abcd