我試圖了解如何向 a 的孩子添加錯誤模板UserControl,并且我看到了其他類似的問題,但我仍然無法解決這個問題。
我的目標是創建一個UserControl具有 aTextBox和 a 的Label,以及一個可選的 readonly TextBox。我已經實作了很多功能并且一切正常,除了UserControl在驗證錯誤的情況下整個會出現紅色邊框。
我嘗試添加Validation.ValidationAdornerSitetoUserControl的根元素,但沒有用。
此外,這個想法是驗證應該在 Model 類中完成,所以我不想在UserControl.
在這種情況下,我不太了解系結系統是如何作業的。UserControl在錯誤中突出顯示整體是有道理的,因為它是UserControl系結到Model's 屬性的 a 的屬性,但我希望能夠將錯誤“重定向”到帶有Validation.ValidationAdornerSite. 我錯過了什么或誤解了什么?例如,如何突出顯示TextBox“txt1”?
提前致謝!
這是我能想到的最小的例子:
我的控制元件.xaml
<UserControl x:Class="MyNamespace.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel x:Name="ctRoot">
<Label x:Name="lbTitle" Content="MyLabel"/>
<TextBox x:Name="txt1" Text="{Binding Text}"/>
<TextBox x:Name="txt2"/>
</StackPanel>
</UserControl>
我的控制元件.xaml.cs
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
ctRoot.DataContext = this;
}
public static readonly DependencyProperty TextProperty = DependencyProperty
.Register("Text", typeof(string), typeof(MyControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
模型.cs
public class Model : INotifyDataErrorInfo, INotifyPropertyChanged
{
private string m_prop;
public string MyProp
{
get => m_prop;
set
{
m_errors.Clear();
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(MyProp)));
if (value.Length == 0)
{
m_errors.Add("Cannot be empty");
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(MyProp)));
}
m_prop = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyProp)));
}
}
private List<string> m_errors = new List<string>();
public bool HasErrors => m_errors.Count > 0;
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public event PropertyChangedEventHandler PropertyChanged;
public IEnumerable GetErrors(string propertyName)
{
return m_errors;
}
}
我的視窗.xaml
<Window x:Class="MyNamespace.MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNamespace"
Title="MyWindow" Width="200" Height="200">
<StackPanel>
<local:MyControl Text="{Binding MyProp}" Margin="10"/>
</StackPanel>
</Window>
我的視窗.xaml.cs
public partial class MyWindow : Window
{
public Model model = new Model();
public MyWindow()
{
InitializeComponent();
DataContext = model;
}
}
uj5u.com熱心網友回復:
您可以使用Validation.ValidationAdornerSiteFor更改出現的元素以指示發生了錯誤。
<UserControl x:Class="WpfApp1.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="myControl">
<StackPanel x:Name="ctRoot">
<Label x:Name="lbTitle" Content="MyLabel"/>
<TextBox x:Name="txt1" Text="{Binding Text, ElementName=myControl}"
Validation.ValidationAdornerSiteFor="{Binding ElementName=myControl}"/>
<TextBox x:Name="txt2"/>
</StackPanel>
</UserControl>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376934.html
上一篇:WPF將顏色系結到橢圓并自動更新
下一篇:WPF更改或覆寫默認系統顏色
