‘WPF’ カテゴリーのアーカイブ

WPFでバリデーションを設定する手順

2008年7月31日 木曜日

TextBox.Textに設定する手順。下記のようにValidation.ErrorTemplateにバリデーションを表示するコントロールのテンプレートを設定し、Binding.ValidationRulesプロパティにExceptionValidationRuleを設定する。

ExceptionValidationRuleはバインディング ソース プロパティの更新中にスローされる例外をチェックできる。このほかにWindows Formsで使われるIDataErrorInfoに夜エラーをチェックできるDataErrorValidationRuleも使用できる。

<TextBox Width="60" TextAlignment="Right" TabIndex="1" Validation.ErrorTemplate="{StaticResource ValidationTemplate}"
Style="{ StaticResource TextBoxInError}" >
<TextBox.Text>
<Binding Path="RecordCount" Mode="TwoWay">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

バリデーションを表示するコントロールのテンプレートの設定例は下記。

<ControlTemplate x:Key="ValidationTemplate">
<DockPanel>
<AdornedElementPlaceholder/>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
</DockPanel>
</ControlTemplate>

AdornedElementPlaceholderはこの場合TextBoxの位置を表し、この例ではTextBoxの後に「!」を表示する。

さらに下記の設定で例外のメッセージをTextBoxのToolTipとして表示できる。

<Style x:Key="TextBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>

WPFでUIスレッドとは別のスレッドからUIオブジェクトを操作するには

2008年7月25日 金曜日

WPFのオブジェクトはほとんどがDispatcherObjectから派生している。DispatcherObjectオブジェクトのDispatcherプロパティを使用して、下記のメソッドにUIの操作を行うデリゲートを渡して操作を行う。

this.Dispatcher.BeginInvoke(DispatcherPriority, Delegate) – 非同期の場合

this.Dispatcher.Invoke(DispatcherPriority, Delegate) – 同期の場合