Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 有没有办法从xaml调用外部函数?_Wpf_Xaml_Resources_Methods_Call - Fatal编程技术网

Wpf 有没有办法从xaml调用外部函数?

Wpf 有没有办法从xaml调用外部函数?,wpf,xaml,resources,methods,call,Wpf,Xaml,Resources,Methods,Call,有没有办法直接从xaml调用外部对象(例如资源对象)的方法 我的意思是这样的: <Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly"> <Grid.Resources> <dm:TimeSource x:Key="timesource1"/> </Grid.Resources> <Button Click="timesource_up

有没有办法直接从xaml调用外部对象(例如资源对象)的方法

我的意思是这样的:

<Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly">
    <Grid.Resources>
      <dm:TimeSource x:Key="timesource1"/>
    </Grid.Resources>

    <Button Click="timesource_updade">Update time</Button>
</Grid>
timesource_update方法当然是timesource对象的方法

我需要使用纯XAML,而不是任何代码。检查线程,它也有类似的问题。通常不能直接从xaml调用方法。 您可以使用命令,也可以从xaml创建一个对象,该对象将在线程上创建一个方法,该方法将在需要时自行处理

但是我恐怕你不能用纯XAML来做。在C语言中,您可以在XAML中做任何事情,但不能反过来做。您只能从XAML中执行一些在C中可以执行的特定操作。

检查线程,它也有类似的问题。通常不能直接从xaml调用方法。 您可以使用命令,也可以从xaml创建一个对象,该对象将在线程上创建一个方法,该方法将在需要时自行处理


但是我恐怕你不能用纯XAML来做。在C语言中,您可以在XAML中做任何事情,但不能反过来做。您只能从XAML中执行一些在C中可以执行的特定操作。

好的,这里是最终解决方案

XAML:


时间源必须从UIElement派生才能具有CommandBinding。但结果是直接从XAML调用外部组装方法。通过单击按钮,将调用对象timesource1的“UpdateExecuted”方法,这正是我想要的。

好的,这里是最终解决方案

XAML:


时间源必须从UIElement派生才能具有CommandBinding。但结果是直接从XAML调用外部组装方法。通过单击按钮,调用对象timesource1的“UpdateExecuted”方法,这正是我想要的。

这为我指明了一个非常好的方向。谢谢你的帮助,看看下面我的最终解决方案。这为我指明了明确的方向。谢谢你的帮助,看看下面我的最终解决方案。这能回答你的问题吗?这回答了你的问题吗?
    <Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly">
        <Grid.Resources>
          <dm:TimeSource x:Key="timesource1"/>
        </Grid.Resources>

        <Button Command="{x:Static dm:TimeSource.Update}" 
                CommandParameter="any_parameter" 
                CommandTarget="{Binding Source={StaticResource timesource1}}">Update time</Button>
    </Grid>
public class TimeSource : System.Windows.UIElement {

  public static RoutedCommand Update = new RoutedCommand();

  private void UpdateExecuted(object sender, ExecutedRoutedEventArgs e)
  {
      // code
  }

  private void UpdateCanExecute(object sender, CanExecuteRoutedEventArgs e)
  {
      e.CanExecute = true;
  }

  // Constructor
  public TimeSource() {

    CommandBinding cb = new CommandBinding(TimeSource.Update, UpdateExecuted, UpdateCanExecute);
    CommandBindings.Add(cb2);
  }
}