Xamarin UWP 将字段名称获取到发件人

Posted

技术标签:

【中文标题】Xamarin UWP 将字段名称获取到发件人【英文标题】:Xamarin UWP get field name into sender 【发布时间】:2022-01-08 20:38:09 【问题描述】:

我在 Xamarin 中为 UWP 创建一个表单,我有这个代码:

XAML

<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
  <Label Text="My Checkbox"
         VerticalOptions="Center"
         TextColor="White"></Label>
  <CheckBox x:Name="myCheckbox"
            WidthRequest="150"
            VerticalOptions="Center"
            Color="#ff914d"
            CheckedChanged="Check_Changed"></CheckBox>
  <Label Text="Other Checkbox"
         VerticalOptions="Center"
         TextColor="White"></Label>
  <CheckBox x:Name="otherCheckbox"
            WidthRequest="150"
            VerticalOptions="Center"
            Color="#ff914d"
            CheckedChanged="Check_Changed"></CheckBox>
</StackLayout>

在我的 CS 中: (GET_FIELD_NAME 在我的代码中不是这样的,我要求一种方法来做到这一点)

void Check_Changed(object sender, CheckedChangedEventArgs e)
        
            switch( GET_FIELD_NAME )
            
                case myCheckbox :
                    // Update myCheckbox var
                case otherCheckbox :
                    // Update otherCheckbox var
                etc.
            
        

因为我有大量的复选框,所以我不想要大量不同的方法,而是需要一个带有开关的复选框,该开关用获取的名称更新正确的 var。 我查看了“发件人”属性,但什么也没找到…… 我怎样才能得到这些信息:x:Name of field clicked only one method for all

谢谢你的帮助^^ (对不起,英语不是我的母语)

【问题讨论】:

Name 只是一个 XAML 助手,它不是您可以在运行时访问的实际属性。您可以将一些未使用的属性(如 StyleId)重新用于相同的目的 如果答案已经解决了您的问题,请mark它被接受 【参考方案1】:

执行此操作的更好方法是定义一个附加的Tag BindableProperty,如 UWP 平台控件。并使用以下 taghelper 在 xaml 中使用标记值指定每个 CheckBox。

附加课程

public class TagHelper

    public static readonly BindableProperty TagProperty = BindableProperty.Create("Tag", typeof(string), typeof(TagHelper), null);

    public static string GetTag(BindableObject bindable)
    
        return (string)bindable.GetValue(TagProperty);
    

    public static void SetTag(BindableObject bindable, string value)
    
        bindable.SetValue(TagProperty, value);
    

用法

<StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
    <Label
        Text="My Checkbox"
        TextColor="White"
        VerticalOptions="Center" />
    <CheckBox
        x:Name="myCheckbox"
        local:TagHelper.Tag="myCheckbox"
        CheckedChanged="Check_Changed"
        VerticalOptions="Center"
        WidthRequest="150"
        Color="#ff914d" />
    <Label
        Text="Other Checkbox"
        TextColor="White"
        VerticalOptions="Center" />
    <CheckBox
        x:Name="otherCheckbox"
        local:TagHelper.Tag="otherCheckbox"
        CheckedChanged="Check_Changed"
        VerticalOptions="Center"
        WidthRequest="150"
        Color="#ff914d" />
</StackLayout>

后面的代码使用GetTag方法检索标签值。

private void Check_Changed(object sender, CheckedChangedEventArgs e)

    var checkbox = sender as CheckBox;
    var tag = TagHelper.GetTag(checkbox);
    switch (tag)
    
        case "myCheckbox":

            break;


        case "otherCheckbox":

            break;

        default:
            break;
    

【讨论】:

正是我想要的!谢谢!

以上是关于Xamarin UWP 将字段名称获取到发件人的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Xamarin UWP 应用名称

无法将项目添加到 PasswordCredential.Properties 字段(C# uwp)

Facebook Graph API 没有返回(发件人)字段以获取评论?

Xamarin 表单从另一个视图获取数据

如何将“安装”目标添加到 Xamarin.UWP .csproj 文件?

如何将占位符颜色属性添加到 xamarin 表单中的自动完成字段?