我有一个正在编写的 UserControl
,它将有一个 TextBox
和 Button
。当用户单击按钮时,我希望将当前日期/时间放入 TextBox
中。下面的代码有两个问题:
- 出于某种原因,绑定(bind)抛出异常“双向绑定(bind)需要 Path 或 XPath”。
- 如果我只是将值设置为“测试”之类的值,那么它会起作用,但只有在按下按钮本身时,一旦我抬起鼠标按钮,文本就会消失。
本质上,我希望在鼠标点击时而不是在期间设置值。如果可能的话,我想保留这个纯 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>
最佳答案
通过将绑定(bind)模式设置为 OneWay,您应该能够摆脱“双向绑定(bind)需要 Path 或 XPath”异常。默认情况下,文本框有两种绑定(bind)方式,我认为异常是由于值转换造成的。
<Setter Property="Text" Value="{Binding Source={x:Static sys:DateTime.Now}, StringFormat='{}{0:MM/dd/yyyy hh:mm:ss}', Mode=OneWay}" />
在您的第二个点上,该值仅在按下按钮时显示并在释放按钮单击后消失,这是预期的行为。 Trigger Setter 仅在绑定(bind)条件为真时应用,当条件不再为真时,它将恢复为默认值。
请参阅 MSDN 网站的备注部分,其中详细说明了上述行为:http://msdn.microsoft.com/en-us/library/system.windows.trigger.aspx
除非您有非常充分的理由坚持使用基于 XAML 的解决方案,否则代码隐藏似乎是更好的选择,而不是使用触发器进行调整。
关于c# - 单击按钮时将文本框文本设置为当前时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640109/