c# - 单击按钮时将文本框文本设置为当前时间

标签 c# wpf xaml

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

  1. 出于某种原因,绑定(bind)抛出异常“双向绑定(bind)需要 Path 或 XPath”。
  2. 如果我只是将值设置为“测试”之类的值,那么它会起作用,但只有在按下按钮本身时,一旦我抬起鼠标按钮,文本就会消失。

本质上,我希望鼠标点击时而不是在期间设置值。如果可能的话,我想保留这个纯 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/

相关文章:

wpf - XAML只读组合框

wpf - 我应该使用哪些 WPF 框架?

c# - Wpf 使用 ivalueconverter 根据列表框的选定值更改矩形颜色

wpf - 如何使用DynamicDataDisplay在wpf中的一个x-y平面中添加多个图形

xaml - 框架不符合HeightRequest

c# - linq to xml检查 key 是否存在?

c# - Bang 与 Visual Basic 中的默认属性

c# - 有状态服务的依赖注入(inject)

c# - asp.net c# 中的字 rune 字过多

c# - 使用 DataGridTemplateColumn.CellTemplate 并绑定(bind)到数据表时,DataGrid 中的重复列