首页 > 解决方案 > 如何在uwp中传递转换器参数中的元素?

问题描述

我必须在 UWP 中传递转换器参数中的元素,如下面的 WPF 代码片段。

   <DataTemplate>
      <TextBlock  Text="{Binding Converter={StaticResource captionSummaryRowConverter}, ConverterParameter= {x:Reference Name= dataGrid}}" Foreground="Blue" Background="Yellow" FontSize="15"></TextBlock>
   </DataTemplate>

由于 x:Reference 关键字在 Uwp 中不可用,是否有任何可能的方法将元素传递给 uwp 中的转换器参数。

标签: c#uwp

解决方案


如何在uwp中传递转换器参数中的元素?

目前,Converter 不支持 pass element ConverterParameter。我们经常使用它来传递StaticResource 或字符串格式。

<TextBlock Text="{Binding DoubleValue,Converter={StaticResource StringFormatConverter},ConverterParameter='{}{0:N2}'}"/>

或者

<TextBlock Text="Score : 60" Foreground="{Binding Passed,Converter={StaticResource BoolToValueConverter},ConverterParameter={StaticResource PassedBrush},FallbackValue={StaticResource FailedBrush}}"/>

更新

您可以将属性添加到 Converter 并与您的根面板绑定,然后将元素名称作为参数传递给 Converter,调用 FindName 方法来获取元素。

public class ImageConverter : IValueConverter
 {
     public UIElement UIParameter { get; set; }
     public object Convert(object value, Type targetType, object parameter, string language)
     {
         var rootGrid = UIParameter as Grid;
         if(parameter != null)
         {
             var ele = rootGrid.FindName(parameter.ToString());

         }

         return value;
     }
 }

用法

<local:ImageConverter x:Key="ImageConverter" UIParameter="{x:Bind RootGrid}" />
</Page.Resources>
<Grid x:Name="RootGrid">
    <TextBlock x:Name="TestBlock" Text="Hello" />
    <Image Source="{Binding Converter={StaticResource ImageConverter}, ConverterParameter='TestBlock'}" />
    <ComboBox

推荐阅读