在按钮单击时将文本框文本设置为当前时间

时间:2014-05-13 19:38:13

标签: c# wpf xaml

我有一个UserControl,我写的是TextBoxButton。当用户点击该按钮时,我希望将当前日期/时间放入TextBox。下面的代码有两个问题:

  1. 由于某种原因,绑定会引发异常"双向绑定需要Path或XPath"。
  2. 如果我只是将值设置为" Test",那么它可以正常工作,但只有按下按钮本身时,一旦我拿起鼠标按钮,文字就会消失。
  3. 从本质上讲,我希望在> 期间 设置值。如果可能的话,我想保留这个纯xaml,但我知道它是否需要在代码隐藏中。任何帮助将不胜感激!

    <Button x:Name="ClockGo">
        <Image Source="/Best.Controls;component/Resources/clock_go.png" />
    </Button>
    <TextBox HorizontalAlignment="Stretch">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=ClockGo, Path=IsPressed}" Value="True">
                        <Setter Property="Text" Value="{Binding Source={x:Static sys:DateTime.Today}, StringFormat='{}{0:MM/dd/yyyy}'}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
    

1 个答案:

答案 0 :(得分:4)

你应该能够摆脱&#34;双向绑定需要Path或XPath&#34;将绑定模式设置为OneWay的异常。默认情况下,Textbox具有双向绑定,我认为该异常是由于值转换造成的。

<Setter Property="Text" Value="{Binding Source={x:Static sys:DateTime.Now}, StringFormat='{}{0:MM/dd/yyyy hh:mm:ss}', Mode=OneWay}" />

在第二个点上,仅在按下按钮时显示该值并在释放按钮单击后消失,这是预期的行为。触发器设置器仅在绑定条件为真时应用,当条件不再为真时,它将恢复为默认值。

请参阅备注部分的MSDN网站,其中列出了上述行为:http://msdn.microsoft.com/en-us/library/system.windows.trigger.aspx

除非你有充分理由坚持使用基于XAML的解决方案,否则代码背后似乎是更好的选择,而不是使用触发器进行调整。