XamDateTimeEditor.IsReadOnly で不思議な挙動
現在 Infragistics さんの NetAdvantage for WPF を評価中です。
すべてのコントロールを評価するのはこれからなのですが、WPF が DateTimePicker を提供しておらず、他のコントロールでは
コントロール | 問題 |
ToolKit DatePicker | 日付しか管理できない! |
相互運用による WindowsForms の DateTimePicker | 描画処理で重大な問題あり。*1 |
相互運用による GrapeCity.InputMan の GcDate(v5.0) | 描画処理で重大問題あり。また相互運用だと Leave イベントが発生しない!フォーカス外れても編集状態のまま!>< |
AvalonControlsLibrary.DateTimePicker | 書式設定できない上にエディタで編集不可 |
と色々問題があったため、最も DateTimePiker に近い動きをする XamDateTimeEditor クラスを評価しています。
しかしこれも不思議な動きをしますね。
まず 以下のように XAML を設定します。
<Window ・・・ xmlns:igEditors="http://infragistics.com/Editors" ・・・ /> <igEditors:XamDateTimeEditor x:Name="XamDateTimeEditor1" IsReadOnly="True" />
Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded Me.XamDateTimeEditor1.Value = DateTime.Now End Sub
すると XamDateTimeEditor は真っ白になります。しかしフォーカスを当てると値が表示される・・・(-ω-;
しかし DropDownButtonDisplayMode="Always" にし、コードで先に値を設定してから IsReadOnly を True にすれば
データは表示されます。
<Window ・・・ xmlns:igEditors="http://infragistics.com/Editors" ・・・ /> <igEditors:XamDateTimeEditor x:Name="XamDateTimeEditor1" DropDownButtonDisplayMode="Always" />
Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded Me.XamDateTimeEditor1.Value = DateTime.Now Me.XamDateTimeEditor1.IsReadOnly = True End Sub
ちなみに試した環境は XP/SP3 + VS 2010。
しかしこの現象、環境が XP だからなのか? Vista や 7 だとどうなんだろうか?まだ試してない・・・
2011/01/22 17:00 追記
さらにいろいろ調べてみました。以下のように、上記の記事をもとにプロジェクトを作成してみる。
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:igEditors="http://infragistics.com/Editors" Title="MainWindow" Height="271" Width="219" Loaded="Window_Loaded"> <StackPanel> <igEditors:XamDateTimeEditor Name="xamDateTimeEditor1" IsReadOnly="True" /> <igEditors:XamDateTimeEditor Name="xamDateTimeEditor2" DropDownButtonDisplayMode="Always" /> </StackPanel> </Window>
using System; using System.Windows; namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { this.xamDateTimeEditor1.Value = DateTime.Now; this.xamDateTimeEditor2.Value = DateTime.Now; this.xamDateTimeEditor2.IsReadOnly = true; } } }
これは大丈夫だった。
現象が発生するのは複雑な要素を持つ Window だからなのか?さっぱりわからん・・・(-ω-;
2011/01/24 追記。判明1。高さを XAML で明示的に設定すると発生する。
まずひとつ判りました。高さを XAML で明示的に設定すると再現するのが確認できました。
Height="22" とか指定すると、どちらの XamDateTimeEditor も真っ白になり、フォーカスを当てると値が表示される。
高さを指定しなければ、普通に値が表示されます。XP でしか試してないので、Vista や 7 はどうだか判りません。
この問題は確認できましたが、現在のプロジェクトでは相変わらず当初の問題が発生してる・・・判らん・・・
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:igEditors="http://infragistics.com/Editors" Title="MainWindow" Height="271" Width="219" Loaded="Window_Loaded"> <StackPanel> <igEditors:XamDateTimeEditor Name="xamDateTimeEditor1" IsReadOnly="True" Height="22" /> <igEditors:XamDateTimeEditor Name="xamDateTimeEditor2" DropDownButtonDisplayMode="Always" Height="22" /> </StackPanel> </Window>