gpt4 book ai didi

WPF:将依赖属性格式化为字符串以显示在文本 block 中的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-05 01:13:50 24 4
gpt4 key购买 nike

这是基于 answer 的跟进上一个问题。我设法提出了一个 DependencyProperty,它将使用 Timer 进行更新以始终具有最新的日期时间,以及一个显示日期时间的文本 block 。由于它是一个 DependencyProperty,每当计时器更新值时,文本 block 也会显示最新的 DateTime。

依赖对象

    public class TestDependency : DependencyObject
{
public static readonly DependencyProperty TestDateTimeProperty =
DependencyProperty.Register("TestDateTime", typeof(DateTime), typeof(TestDependency),
new PropertyMetadata(DateTime.Now));

DispatcherTimer timer;

public TestDependency()
{
timer = new DispatcherTimer(new TimeSpan(0,0,1), DispatcherPriority.DataBind, new EventHandler(Callback), Application.Current.Dispatcher);
timer.Start();

}

public DateTime TestDateTime
{
get { return (DateTime)GetValue(TestDateTimeProperty); }
set { SetValue(TestDateTimeProperty, value); }
}

private void Callback(object ignore, EventArgs ex)
{
TestDateTime = DateTime.Now;
}

}

窗口 Xaml

    <Window.DataContext>
<local:TestDependency/>
</Window.DataContext>
<Grid>
<TextBlock Text="{Binding TestDateTime}" />
</Grid>

这很好用,但我想知道,如果我想以不同的方式格式化时间字符串,我该怎么办,有没有办法调用 ToString(formatter)在文本 block 中显示它之前的日期时间,同时保持使用 DependencyProperty 自动更新文本 block 的能力?在代码隐藏中执行此操作的正确方法是什么?如果可能的话,在 Xaml 中执行此操作的正确方法是什么?

而且,如果我要显示多个文本框,每个文本框都有不同的日期时间格式,那么仅使用 1 个计时器在不同文本框中显示所有不同日期时间格式的正确方法是什么,我是否必须创建每种格式的 DependencyProperty?

最佳答案

您可以为此使用字符串格式:

<Window.DataContext>
<wpfGridMisc:TestDependency/>
</Window.DataContext>
<StackPanel>
<TextBlock Text="{Binding TestDateTime, StringFormat=HH:mm:ss}"/>
<TextBlock Text="{Binding TestDateTime, StringFormat=MM/dd/yyyy}"/>
<TextBlock Text="{Binding TestDateTime, StringFormat=MM/dd/yyyy hh:mm tt}"/>
<TextBlock Text="{Binding TestDateTime, StringFormat=hh:mm tt}"/>
<TextBlock Text="{Binding TestDateTime, StringFormat=hh:mm}"/>
<TextBlock Text="{Binding TestDateTime, StringFormat=hh:mm:ss}"/>
</StackPanel>

此外,我认为您应该在更新 DependencyProperty 时使用 SetCurrentValue(),您可以阅读为什么 here

private void Callback(object ignore, EventArgs ex)
{
SetCurrentValue(TestDateTimeProperty, DateTime.Now);
}

关于WPF:将依赖属性格式化为字符串以显示在文本 block 中的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14706117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com