定义方法 WPF 用户控件

本文关键字:控件 用户 WPF 方法 定义 | 更新日期: 2023-09-27 18:35:29

我有这个用户控件:我将此用户控件添加到我的Winforms应用程序(简单的 BusyIndicator)

UserControl x:Class="Stackoverflow.MyBusyIndicator"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <xctk:BusyIndicator x:Name="busyIndicator" IsBusy="{Binding IsBusy}"  />
    </Grid>
</UserControl>

我想要的只是定义我可以从 c# 代码访问的Method以停止此指标。

定义方法 WPF 用户控件

我相信你想在后面的代码中做什么?

public partial class MyBusyIndicator : UserControl
{
    public void ToggleIndicator(bool isBusy)
    {
        // Just an example, in reality you will want to access the BusyIndicator object.
        this.IsBusy = isBusy;
    }
}

你的 XAML 代码很好,现在只需创建一个依赖项属性并将其称为"IsBusy",然后可以使用数据绑定在用户控件 XAML 中绑定到该属性(以直观地指示 IsBusy 属性状态),

public partial class BusyIndicator : UserControl
{
    public BusyIndicator()
    {
        InitializeComponent();
    }
    public bool IsBusy
    {
        get { return (bool)GetValue(IsBusyProperty); }
        set { SetValue(IsBusyProperty, value); }
    }
    public static readonly DependencyProperty IsBusyProperty =  
    DependencyProperty.Register("IsBusy", typeof(bool), typeof(BusyIndicator), 
    new PropertyMetadata(false));
}

试试这个:

<UserControl x:Class="Stackoverflow.MyBusyIndicator"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <xctk:BusyIndicator x:Name="myBusyIndicator" IsBusy="True" />
</Grid>
</UserControl>

代码巴欣德 :

namespace Stackoverflow
{
   using System;
   using System.Windows;
   using System.Windows.Controls;
   public partial class MyBusyIndicator : UserControl
   {
      public MyBusyIndicator()
      {
         this.InitializeComponent();
      }
      public void ShowIndicator(bool isBusy)
      {
         this.myBusyIndicator.IsBusy = isBusy;
      }
    }
}

如果必须首先通过代码隐藏访问它,请先通过 Xaml 为 BusyIndicator 控件提供一个 name 属性: <xctk:BusyIndicator IsBusy="True" x:Name="busyIndicator" />

在代码隐藏中创建如下方法:

void SetIndicator(bool isBusy)
{
    this.busyIndicator.IsBusy = isBusy;
}

如果您使用的是 MVVM,请绑定控件的 IsBusy属性IsBusy={Binding IsBusy}

<xctk:BusyIndicator IsBusy={Binding IsBusy} />

在您的视图模型中定义 IsBusy 属性并创建方法,如下所示:

void SetIndicator(bool isBusy)
{
    IsBusy = isBusy;
}
所以下次你想设置为 True 调用 SetIndicator(

true),或者如果你想把它设置为 false 调用 SetIndicator(false)。