我有幾個文本框,我想執行某些規則。例如,我有一個綁定到Name屬性的Name文本框,並且我不需要任何| <或>該屬性中存在的字符。爲了做到這一點,我創建了下面的類,從有效性規則繼承:捕獲驗證規則已被違反,以防止用戶保存
class NoInvalidCharsRule : ValidationRule
{
private static char[] mInvalidChars = Path.GetInvalidPathChars();
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
String stringValue = value.ToString();
foreach (char invalidChar in mInvalidChars)
{
if (stringValue.Contains(invalidChar))
{
return new ValidationResult(false, "Invalid characters are present in the string.");
}
}
return new ValidationResult(true, "");
}
}
,並在我的.xaml如下綁定:
<pres:OneTextBox Watermark="Name..." Margin="85,12,0,0"
AcceptsReturn="False" MaxLines="1" Height="22" VerticalAlignment="Top"
HorizontalAlignment="Left" Width="300" Style="{StaticResource ErrorStyleTextBox}">
<Validation.ErrorTemplate>
<ControlTemplate>
<DockPanel LastChildFill="True">
<AdornedElementPlaceholder/>
<TextBlock DockPanel.Dock="Right" Foreground="Red" FontSize="20">!</TextBlock>
</DockPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
<pres:OneTextBox.Text>
<Binding Path="InterfaceSpecification.Name" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" >
<Binding.ValidationRules>
<interfaceSpecsModule:NoInvalidCharsRule ValidationStep="RawProposedValue" />
</Binding.ValidationRules>
</Binding>
</pres:OneTextBox.Text>
</pres:OneTextBox>
還有一個「完成」按鈕,我如果名稱文本框中有無效字符,則應該禁用該按鈕或單擊該按鈕時,會彈出一個窗口,告訴用戶存在無效字符。
現在,我所做的代碼僅在紅色的文本框中突出顯示,如果此類字符存在。如果在文本框中找到無效字符,我將如何禁用該按鈕?
編輯:我知道一旦無效字符寫入文本框中,名稱屬性將停止更新。不幸的是,它仍然包含無效字符前的所有內容,我想停止用戶只用幾個有效字符而不是他想要輸入的全名保存該名稱(通過按下done按鈕)。
問題是,什麼是OneTextBox?它是從TextBox派生的嗎? – BlueM
@BlueM是的,它來自TextBox。我正在使用一個自定義框架來封裝幾乎每個WPF控件以增強其功能。 – Choub890