Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DateTime依赖项属性格式化为文本(字符串)_C#_.net_Wpf_Xaml - Fatal编程技术网

C# 将DateTime依赖项属性格式化为文本(字符串)

C# 将DateTime依赖项属性格式化为文本(字符串),c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,编辑:尝试实现转换器时发生GetSign Xaml解析错误 错误:在“System.Windows.Markup.StaticResourceHolder”上提供值时引发异常 目前我有一个字符串依赖属性,它使用绑定并正确显示所有内容。尽管此属性应改为DateTime。我在整个应用程序中使用字符串进行计算,这应该改为使用一个日期时间值 当我尝试将此更改为DateTime时,除了绑定错误之外,我什么也没有得到。之前,属性的类型为String public static readonly Depen

编辑:尝试实现转换器时发生GetSign Xaml解析错误

错误:在“System.Windows.Markup.StaticResourceHolder”上提供值时引发异常


目前我有一个字符串依赖属性,它使用绑定并正确显示所有内容。尽管此属性应改为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