【问题标题】:Casting between types in XAML [duplicate]XAML 中的类型之间的转换 [重复]
【发布时间】:2016-07-07 15:23:39
【问题描述】:

这个问题与我昨天提出的this question 有关,但无法找到答案。我想知道在 XAML 中是否可以在类型之间进行转换。我找到了 [this answer][2],但我无法让该语法正常工作。我希望能够向下转换为一种类型以访问它的一些属性。我更喜欢仅使用 XAML 的方法,但如果需要使用 C#,我也可以这样做。任何帮助表示赞赏。谢谢

编辑:

添加一些代码来澄清我的问题。

我的问题是当我尝试绑定到特定于子类单元类型之一的属性时,XAML 看不到它,我只是返回 0。通常,如果这是在 C# 中完成的,我只会强制转换它并访问该属性,但此时我无法在我的代码中执行此操作。绑定是在 C# 中创建的,如下所示:

 dgtc.Header = Properties.Resources.MaxPressure;
 dgtc.MinWidth = 25;
 dgtc.Width = Properties.Settings.Default.MaxPressureColumnWidth;
 dgtc.IsReadOnly = true;
 dgtc.Binding = new Binding("Unit.MaxDepthRelativeToEntry")
 {
     Converter = new DistanceUnitsConverter()
 };

其中 dgtc 是一个 DataGridTextColumn。 Unit.MaxDepthRelativeToEntry 为 0,因为它是 AUnit 子类的属性,因此 XAML 认为我正在尝试访问不存在的属性。

从第二个链接到目前为止,我已经尝试了以下一些语法:

dgtc.Binding = new Binding("AUnit.MaxDepthRelativeToEntry")
dgtc.Binding = new   Binding("Unit(MyNameSpace:AUnit).MaxDepthRelativeToEntry")
dgtc.Binding = new Binding("Unit(MyNameSpace:AUnit.MaxDepthRelativeToEntry)")

并且无法使任何这些工作。我也尝试通过转换器执行此操作,但问题是,当我构建 DataGrid/设置绑定/等时,我没有可用的单元列表。所以我无法从实例中获取属性并将其返回。有谁知道我可以通过任何方式(最好是在 XAML 中)获取我绑定到的类型的子类类型的属性?

【问题讨论】:

  • 创建一个 Minimal, Complete, and Verifiable 示例,说明您尝试过但失败了。
  • 我不认为你可以在 xaml 中进行转换,因为它只是一个标记,在 c# 中,只要转换有效(可能通过转换器,或者后面的代码)。

标签: c# wpf xaml


【解决方案1】:

正如 Eli 指出的那样,如果没有一些示例代码,很难准确说出您要完成的工作。但是,对您来说一个简单的解决方案可能是仅使用带有转换器的绑定。这是一个(未经测试的)转换器示例,它会尝试转换为特定类型:

public class CastAsMyTypeConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var myTypeObject = value as MyType;
        return myTypeObject ?? Binding.DoNothing;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2016-07-27
    • 2012-11-02
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多