定义方法WPF用户控件

时间:2014-12-29 11:44:05

标签: c# .net wpf

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

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>

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

4 个答案:

答案 0 :(得分:0)

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

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;
    }
}

答案 1 :(得分:0)

试试这个:

<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>

Code Bahind:

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;
      }
    }
}

答案 2 :(得分:0)

您的XAML代码很好,现在只需创建一个依赖属性并调用它,然后使用DataBinding(可视地指示IsBusy属性状态)将其绑定到UserControl XAML中,然后使用#34; IsBusy&#34;

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));
}

答案 3 :(得分:0)

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

在你的代码背后创建一个方法如下:

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

如果您正在使用MVVM绑定您的控件的IsBusyProperty IsBusy={Binding IsBusy}

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

在你的viewmodel中定义IsBusy属性和create方法如下:

void SetIndicator(bool isBusy)
{
    IsBusy = isBusy;
}

因此,下次要设置为True时调用SetIndicator(true),或者如果要将其设置为false,则调用SetIndicator(false)。