c# - UWP Datagrid 格式列内容
问题描述
我正在尝试编写一个音乐播放器。现在我的音乐列表是这样的:
但是,我不希望音乐持续时间像 int 一样显示。我希望它类似于“3:15”。如何将其转换为时间格式?
这是我失败的尝试:
<controls:DataGridTextColumn
MaxWidth="120"
Binding="{Binding Duration}"
Header="Duration">
<controls:DataGridTextColumn.CellStyle>
<Style TargetType="TextBox">
<Setter Property="Text" Value="{Binding Converter={StaticResource MusicDurationConverter}}" />
</Style>
</controls:DataGridTextColumn.CellStyle>
</controls:DataGridTextColumn>
我已经创建了转换器类,但找不到此转换器。(转换器和 xaml 在同一个文件夹下。)
class MusicDurationConverter : Windows.UI.Xaml.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is string)
{
int seconds;
if (int.TryParse((string)value, out seconds)) return ToTime(seconds);
}
if (value is int) return ToTime((int)value);
return "";
}
private string ToTime(int seconds)
{
int second = seconds % 60;
int minute = (seconds - second) / 60;
return string.Format("{0}:{1}", minute, second);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
此外,我希望收藏栏中的“错误”消失。当鼠标悬停在该单元格上方时,会显示一个心形按钮。
提前致谢!
解决方案
您已成功创建转换器类,但您似乎没有在资源列表中创建它的实例。
尝试添加:
<Page.Resources>
<MusicDurationConverter x:Key="MusicDuarationConverter"/>
</Page.Resources/>
并修改绑定的位置:
<controls:DataGridTextColumn
MaxWidth="120"
Binding="{Binding Duration, Converter={StaticResource MusicDurationConverter}}"
Header="Duration">
</controls:DataGridTextColumn>
此致。
推荐阅读
- r - 闪亮的数据下载
- c# - 如何在启动时不崩溃的情况下捕获并排 (SxS) 清单加载错误?
- python - 将 report_tensor_allocations_upon_oom 添加到 cifar10_estimator 示例
- vue.js - Nuxt/Vue/Bootstrap-vue 在滚动时收缩导航栏
- c# - Angular 仅添加逗号 6 位数字
- java - 尝试创建 OkHttpClient 对象时出现 kotlin/TypeCastException
- android - Android 布局设计在手机上看起来不一样
- tensorflow - 使用 TensorFlow 图形转换工具
- twitter-bootstrap - Bootstrap 4 Collapsed Navbar - 无法对齐不可折叠的项目
- google-chrome - 如何使 Chrome 始终使用远程调试端口标志启动