我有工具提示翻转日期格式的触发器。这两种触发器都起作用。但是,当我将字符串格式应用于第一个字符串并将字符串"UTC“添加/追加到DateTime值时,日期将以正确的日期时间格式正确显示,但"UTC”部分没有追加:
....
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ShowUTC}" Value="True">
<Setter TargetName="brd" Property="Border.ToolTip"
Value="{Binding Path=SomeDate,
<!--Problem on the line below - the 'UTC' part isn't being added -->
StringFormat={}{0:ddd MM/dd/yy HH:mm:ss} UTC}" />
</DataTrigger>
<DataTrigger Binding="{Binding ShowUTC}" Value="False">
<Setter TargetName="brd" Property="Border.ToolTip"
Value="{Binding SomeDate,
Converter={StaticResource ToLocalTime}}"/>
</DataTrigger>
.....
这应该适用于MSDN:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.stringformat(v=vs.110).aspx --我也在其他类型中尝试过--并且已经成功了,DateTime有什么用吗?
更新:
有趣的是,使用相同的代码在TextBlock上工作:
Text="{Binding Path=EndInterval, StringFormat={}{0:ddd MM/dd/yy HH:mm:ss} UTC}"
但不是在工具提示上:
<Border Tooltip="{Binding Path=EndInterval, StringFormat={}{0:ddd MM/dd/yy HH:mm:ss} UTC}"
发布于 2014-01-13 16:43:54
好吧,对于任何遇到同样问题的人,我都会发布我最后做的事情。
因为我不能让StringFormat直接在ToolTip上工作。最后,我对它进行了样式化,并将StringFormat直接应用到ToolTip中的TextBlock
中:
<Border ..>
<Border.ToolTip>
<ToolTip>
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text"
Value="{Binding Path=SomeDate,
Converter={StaticResource ToLocalTime}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowUtc}" Value="True">
<Setter Property="Text" Value="{Binding Path=SomeDate,
StringFormat={}{0:ddd MM/dd/yy HH:mm:ss} UTC}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
发布于 2014-01-13 18:30:08
因为绑定是到ToolTip的,所以它在隐式地设置内容属性。ToolTips具有要格式化时使用的ContentFormatString属性。我还没有测试过它,但我认为下面的方法会有效的。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ShowUTC}" Value="True">
<Setter TargetName="brd" Property="Border.ToolTip"
Value="{Binding Path=SomeDate}" />
<Setter TargetName="brd" Property="Border.ToolTip.ContentFormatString"
Value="{}{0:ddd MM/dd/yy HH:mm:ss} UTC" />
</DataTrigger>
<DataTrigger Binding="{Binding ShowUTC}" Value="False">
<Setter TargetName="brd" Property="Border.ToolTip"
Value="{Binding SomeDate,
Converter={StaticResource ToLocalTime}}"/>
</DataTrigger>
</DataTemplate.Triggers>
发布于 2016-10-30 20:53:30
最后,我不得不求助于一个转换器,因为我没有找到如此有效的东西。
using System;
using System.Globalization;
using System.Windows.Data;
namespace Converters
{
[ValueConversion(typeof(DateTime), typeof(string))]
public class DateTimeStringFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is DateTime && parameter != null)
return ((DateTime)value).ToString(parameter.ToString());
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
}
使用
<Border ToolTip="{Binding DateTime, Converter={StaticResource DateTimeStringFormatConverter}, ConverterParameter=yyyy}"/>
简单,但有效。
https://stackoverflow.com/questions/21050399
复制相似问题