XAML 是否可以将DataGrid中的DataGridText列格式化为超链接?

iqxoj9l9  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(92)

我在XAML代码中定义了一个DataGrid:

<syncfusion:SfDataGrid x:Name="PasswdVw" Grid.Row="2" Grid.Column="2" Grid.RowSpan="2" ItemsSource="{Binding PassWrd}"
                           SelectedRow="{Binding SelPassRws, Mode=TwoWay}" GridLinesVisibility="Both" SelectionMode ="Multiple" NavigationMode="Row"
                           Margin="20,20,0,0" HeaderRowHeight="35" ColumnWidthMode="Fill"
                           VerticalScrollBarVisibility="Always" SortingMode="Single">
        <syncfusion:SfDataGrid.DefaultStyle>
            <syncfusion:DataGridStyle RowBackground="white" SelectedRowTextColor="White" SelectionBackground="blue"
                                      HeaderRowBackground="#C5C5C5" HeaderRowTextColor="Black" HeaderRowFontAttributes="Bold"/>
        </syncfusion:SfDataGrid.DefaultStyle>
        <syncfusion:SfDataGrid.Columns>
            <syncfusion:DataGridTextColumn MappingName="PassId" Width="0"/>
            <syncfusion:DataGridTextColumn MappingName="PassUsrname" HeaderText="User Name"/>
            <syncfusion:DataGridTextColumn MappingName="PassPassword" HeaderText="Password"
                                            Width="150"/>
            <syncfusion:DataGridTextColumn MappingName="PassUrl" HeaderText="Web Site"/>
        </syncfusion:SfDataGrid.Columns>
    </syncfusion:SfDataGrid>

当我运行我的程序时,带有MappingName=“PassUrl”的列总是填充网站地址。但是,它们仅显示为文本字符串。有没有办法把这些字符串转换成一个可点击的超链接?
另外,是否有一种方法可以手动调整列的大小,以便用户可以在运行时根据需要调整每个列的大小?

6tqwzwtp

6tqwzwtp1#

您可以使用TapGestureRecognizer创建超链接。
以下是创建超链接的步骤:

  • 设置“标签”或“范围”的TextColorTextDecoration属性。
  • TapGestureRecognizer添加到Label或Span的GestureRecognizers集合,其Command属性绑定到ICommand,其CommandParameter属性包含要打开的URL。
  • 定义将由TapGestureRecognizer执行的ICommand
  • 编写将由ICommand执行的代码。

下面是代码示例:

<Label>
        <Label.FormattedText>
            <FormattedString>
                <Span Text="Alternatively, click " />
                <Span Text="here"
                      TextColor="Blue"
                      TextDecorations="Underline">
                    <Span.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding TapCommand}"
                                              CommandParameter="https://learn.microsoft.com/dotnet/maui/" />
                    </Span.GestureRecognizers>
                </Span>
                <Span Text=" to view .NET MAUI documentation." />
            </FormattedString>
        </Label.FormattedText>
    </Label>

点击超链接时,TapGestureRecognizer将通过执行Command属性定义的ICommand来响应。此外,CommandParameter属性指定的URL将作为参数传递给ICommand
XAML页面的代码隐藏包含TapCommand实现:

using System.Windows.Input;

public partial class MainPage : ContentPage
{
    // Launcher.OpenAsync is provided by Essentials.
    public ICommand TapCommand => new Command<string>(async (url) => await Launcher.OpenAsync(url));

    public MainPage()
    {
        InitializeComponent();
        BindingContext = this;
    }
}

相关问题