10

私は最新のWPF ツールキット、特にDatePicker. すべて正常に動作しますが、値が指定されていない場合、デフォルトの「SHOW CALENDAR」テキストが DatePickerTextBox に表示されます。この値を WPF で変更できるようにしたいと考えています。

ソースをダウンロードし、新しい Dependency プロパティを追加して、dll に再コンパイルするように言われました。それはクールだけど、もし新しいバージョンがリリースされたら?

そのため、このデフォルト文字列をオーバーライドできるように、このコントロールをそのようにテンプレート化したいと考えています。それを行う方法はありますか?

ありがとう!

4

4 に答える 4

22

わかった。私は自分で解決策を見つけました。

<Style TargetType="{x:Type toolkit:DatePickerTextBox}">
    <Setter Property="Text" Value="Bitte wählen" />
</Style>

とにかく、テキストの代わりに透かしと呼ばれるDependencyPropertyがあるという事実に注意する必要があります。

問題は、最新のMSリリース(2009年6月頃)で、何らかの理由でこのプロパティを読み取り専用にしたことです。つまり、DatePickerが文字列を解析しようとしているため(テキストが日付であると想定しているため)、初回の例外が発生しますが、これが私が作成した唯一のハックですが、通常は気付かないでしょう。

もう1つの可能性は、MSからソースコードを直接編集し、メソッドをオーバーライドSetWaterMark()して、独自の依存関係プロパティ(MyWaterMarkなど)を追加することです。ただし、提供されているを使用することはできませんdll。彼らはそれが.NET4realeseで修正されると言った、見てみましょう。

于 2009-07-09T06:03:30.497 に答える
7
    void _datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        if (_datePicker1.SelectedDate != null) return;

        FieldInfo fiTextBox = typeof(DatePicker)
            .GetField("_textBox", BindingFlags.Instance | BindingFlags.NonPublic);

        if (fiTextBox != null)
        {
            DatePickerTextBox dateTextBox =
              (DatePickerTextBox)fiTextBox.GetValue(_datePicker1);

            if (dateTextBox != null)
            {
                PropertyInfo piWatermark = dateTextBox.GetType()
                  .GetProperty("Watermark", BindingFlags.Instance | BindingFlags.NonPublic);

                if (piWatermark != null)
                {
                    piWatermark.SetValue(dateTextBox, "", null);
                }
            }
        }
    }

Load イベントも同じコードで接続する必要があります。

于 2010-11-04T00:56:49.267 に答える
0

これを行うこともできます:

次の設定を使用して、テキストボックスと日付ピッカーをフォームに追加します。

window.xaml で:

<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="22" Margin="38,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    <DatePicker x:Name="datePicker" HorizontalAlignment="Left" Margin="130,37,0,0" VerticalAlignment="Top" Width="28" BorderBrush="Transparent" SelectedDateChanged="datePicker_SelectedDateChanged"/>

そしてあなたのwindow.xaml.csで:

private void datePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        textBox.Text = datePicker.SelectedDate.Value.ToString("dd.MM.yyyy");
    }

結果は次のようになります

于 2017-05-09T13:38:55.360 に答える