C# 将DateTime依赖项属性格式化为文本(字符串)
编辑:尝试实现转换器时发生GetSign Xaml解析错误 错误:在“System.Windows.Markup.StaticResourceHolder”上提供值时引发异常C# 将DateTime依赖项属性格式化为文本(字符串),c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,编辑:尝试实现转换器时发生GetSign Xaml解析错误 错误:在“System.Windows.Markup.StaticResourceHolder”上提供值时引发异常 目前我有一个字符串依赖属性,它使用绑定并正确显示所有内容。尽管此属性应改为DateTime。我在整个应用程序中使用字符串进行计算,这应该改为使用一个日期时间值 当我尝试将此更改为DateTime时,除了绑定错误之外,我什么也没有得到。之前,属性的类型为String public static readonly Depen
目前我有一个字符串依赖属性,它使用绑定并正确显示所有内容。尽管此属性应改为DateTime。我在整个应用程序中使用字符串进行计算,这应该改为使用一个日期时间值 当我尝试将此更改为DateTime时,除了绑定错误之外,我什么也没有得到。之前,属性的类型为String
public static readonly DependencyProperty DuurStilstandProperty =
DependencyProperty.Register("DuurStilstand", typeof(DateTime), typeof(RegistrationButton), new UIPropertyMetadata(""));
public DateTime DuurStilstand
{
get { return (DateTime)GetValue(DuurStilstandProperty); }
set { SetValue(DuurStilstandProperty, value); }
}
XAML绑定:
<TextBlock x:Name="tbDuurStilstand" TextWrapping="Wrap"
Text="{Binding DuurStilstand, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="7.5,5,0,0" Height="24.8266666666667"/>
<ListBox.ItemTemplate>
<DataTemplate>
<myClasses:RegistrationButton x:Name="RegistrationButton" HorizontalAlignment="Center" Height="71" Width="148"
Margin="10,0,5,0"
Style="{DynamicResource ButtonStyleRegistration}"
Click="RegistrationButton_Click"
Title="{Binding Title}"
Oorzaak="{Binding Oorzaak}"
DuurStilstand="{Binding DuurStilstand}"
BeginStilstand="{Binding BeginStilstand}"
/>
</DataTemplate>
</ListBox.ItemTemplate>
此处显示错误(XamlParseException):
<myClasses:RegistrationButton x:Name="btnTestRegistration" Content="Test Registratie" HorizontalAlignment="Left" Margin="16.8,0,0,118.14"
VerticalAlignment="Bottom" Width="119.2" Height="30.2" FontSize="18.667" Click="btnTestRegistration_Click" Style="{DynamicResource ButtonStyleRegistration}" />
为什么我无法将此更改为DateTime
textblock需要一个字符串,而不是当前获取的日期时间。当内容放置在textblock的.text属性中时,如何确保它将DateTime转换为字符串
向您致意,PeterP在您的属性定义中,您正在将默认值设置为空字符串。显然,这对日期时间无效!您需要提供与属性类型实际兼容的默认值 试试这个:
public static readonly DependencyProperty DuurStilstandProperty =
DependencyProperty.Register("DuurStilstand", typeof(DateTime), typeof(RegistrationButton), new UIPropertyMetadata(DateTime.MinValue));
您可以用MinValue替换任何对您有意义的默认值(可能是DateTime.Now)
要在绑定日期时实际格式化日期,可以使用StringFormat或转换器,正如其他人所建议的那样
编辑
根据您在使用转换器时遇到的问题。您需要创建转换器的实例,然后才能引用它。例如,您可以执行以下操作:
<Window.Resources>
<local:DateTimeConverter x:Key="MyConverter"/>
</Window.Resources>
在属性定义中,将默认值设置为空字符串。显然,这对日期时间无效!您需要提供与属性类型实际兼容的默认值 试试这个:
public static readonly DependencyProperty DuurStilstandProperty =
DependencyProperty.Register("DuurStilstand", typeof(DateTime), typeof(RegistrationButton), new UIPropertyMetadata(DateTime.MinValue));
您可以用MinValue替换任何对您有意义的默认值(可能是DateTime.Now)
要在绑定日期时实际格式化日期,可以使用StringFormat或转换器,正如其他人所建议的那样
编辑
根据您在使用转换器时遇到的问题。您需要创建转换器的实例,然后才能引用它。例如,您可以执行以下操作:
<Window.Resources>
<local:DateTimeConverter x:Key="MyConverter"/>
</Window.Resources>
好的,当您谈论转换(从DateTime到string)时,您可以简单地向绑定添加一个IValueConverter。以下MSDN文章提供了一个示例,说明如何将DateTime转换为字符串:
当您谈论转换(从DateTime转换为字符串)时,您只需向绑定中添加一个IValueConverter。以下MSDN文章提供了一个示例,说明如何将DateTime转换为字符串:
在我看来,在这种情况下,最好的解决方案是利用绑定的数据
public class DateTimeConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo
{
DateTime dt = (DateTime)value;
//convert back to string from dt
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string dateTimeString = value as string;
//Convert to DateTime from dateTimeString
}
}
定义ins say App.xaml
<DateTimeConverter x:Key="DateTimeConverter" />
并约束你的财产
<myClasses:RegistrationButton x:Name="RegistrationButton" HorizontalAlignment="Center" Height="71" Width="148"
Margin="10,0,5,0"
Style="{DynamicResource ButtonStyleRegistration}"
Click="RegistrationButton_Click"
Title="{Binding Title}"
Oorzaak="{Binding Oorzaak}"
DuurStilstand="{Binding DuurStilstand}"
BeginStilstand="{Binding BeginStilstand}"
Converter = {StaticResource DateTimeConverter }
/>
在我看来,在这种情况下,最好的解决方案是利用绑定的数据
public class DateTimeConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo
{
DateTime dt = (DateTime)value;
//convert back to string from dt
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string dateTimeString = value as string;
//Convert to DateTime from dateTimeString
}
}
定义ins say App.xaml
<DateTimeConverter x:Key="DateTimeConverter" />
并约束你的财产
<myClasses:RegistrationButton x:Name="RegistrationButton" HorizontalAlignment="Center" Height="71" Width="148"
Margin="10,0,5,0"
Style="{DynamicResource ButtonStyleRegistration}"
Click="RegistrationButton_Click"
Title="{Binding Title}"
Oorzaak="{Binding Oorzaak}"
DuurStilstand="{Binding DuurStilstand}"
BeginStilstand="{Binding BeginStilstand}"
Converter = {StaticResource DateTimeConverter }
/>
我想你的问题在于:
public static readonly DependencyProperty DuurStilstandProperty =
DependencyProperty.Register("DuurStilstand", typeof(DateTime), typeof(RegistrationButton), new UIPropertyMetadata(""));
您可以使用DateTime,但WPF需要强制提供给DateTime的值,并且您需要UIPropertyMetadata([defaultvalue])
是一个空字符串,不能被转换为DateTime。您应该使用类似于'UIPropertyMetadata(DateTime.MinValue)的内容
另外,我建议您将
IValueConverter
s应用到绑定中,这样您就不会依赖WPF来协调字符串了,这很可能是不可强制的,而是在转换器中有一些逻辑来适当地处理事情。我认为您的问题在于:
public static readonly DependencyProperty DuurStilstandProperty =
DependencyProperty.Register("DuurStilstand", typeof(DateTime), typeof(RegistrationButton), new UIPropertyMetadata(""));
您可以使用DateTime,但WPF需要强制提供给DateTime的值,并且您需要UIPropertyMetadata([defaultvalue])
是一个空字符串,不能被转换为DateTime。您应该使用类似于'UIPropertyMetadata(DateTime.MinValue)的内容
另外,我建议您将
IValueConverter
s应用到绑定中,这样您就不会依赖WPF来协调字符串,这很可能是不可强制的,而是在转换器中有一些逻辑来适当地处理事情。Hello Tigran。在Convert中转换为Formatstring不是另一种方法,还是我弄错了?有点搞不清楚该在这里返回什么(hh:mm:ss)。@PeterP:你说得对。刚刚更正,输入错误。。太快了。我试图实现,但我得到了一个解析错误,我不知道是什么原因。将在帖子顶部发布一些简短的代码。我到底做错了什么?今天早些时候,我尝试实现一个转换器,但由于xmal解析错误,我也失败了。致以最良好的祝愿。@PeterP:在我看来,转换时您会得到一个字符串,但也会返回一个字符串!您必须返回DateTime,因为绑定属性是DateTime(至少基于您的帖子)。嗯,我的当前属性是DateTime,我希望将其转换为绑定属性中的字符串。我很困惑:/我的应用程序现在一直在崩溃。因为我不懂,你能告诉我到底要退什么吗?干杯/彼得·蒂格兰。在Convert中转换为Formatstring不是另一种方法,还是我弄错了?有点搞不清楚该在这里返回什么(hh:mm:ss)。@PeterP:你说得对。刚刚更正,输入错误。。太快了。我试图实现,但我得到了一个解析错误,我不知道是什么原因。将在帖子顶部发布一些简短的代码。我到底做错了什么?今天早些时候,我尝试实现一个转换器,但由于xmal解析错误,我也失败了。致以最良好的祝愿。@PeterP:在我看来,转换时您会得到一个字符串,但返回一个st