我只是想启用或禁用我使用的WPF编辑器的ControlTemplate内的按钮。我在ControlTemplate中有一个按钮。我如何得到它的参考?
回答
我同意Joel的首选方法是通过触发器或通过将Enabled值绑定到另一个依赖项属性(可能在父元素上)来触发设置按钮的Enabled属性和xaml标记, ValueConverter的帮助。但是,如果必须在C#中明确执行此操作,则可以在按钮的模板属性上使用FindName()方法。有一个MSDN'如何'linked here。
你真的不应该明确这么做,而应该在ControlTemplate
本身中设置触发器。这些触发器会对其他更改作出反应,并将设置Button
的Enabled
属性。
我建议按钮很容易通过RoutedUICommands进行控制 - 包括轻松启用和禁用它们。命令不需要对Button的任何类型的引用,所以这也解决了你的问题。
在这里看到:
<Window.CommandBindings>
<CommandBinding
Command="{x:Static local:MyCommands.MyCommand}"
Executed="CommandBinding_Executed"
CanExecute="CommandBinding_CanExecute" />
</Window.CommandBindings>
<Window.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="Label">
<Button Command="{x:Static local:MyCommands.MyCommand}">
<TextBlock>
Click Me
<TextBlock Text="{TemplateBinding Content}" />
</TextBlock>
</Button>
</ControlTemplate>
</Window.Resources>
<StackPanel>
<Label Template="{StaticResource MyTemplate}">1</Label>
<Label Template="{StaticResource MyTemplate}">2</Label>
<Label Template="{StaticResource MyTemplate}">3</Label>
<Label Template="{StaticResource MyTemplate}">4</Label>
<Label Template="{StaticResource MyTemplate}">5</Label>
</StackPanel>
使用此:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void CommandBinding_CanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e)
{
// your logic here
int _Integer = -1;
int.TryParse(e.Parameter.ToString(), out _Integer);
e.CanExecute = _Integer % 2 == 0;
}
private void CommandBinding_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)
{
// do something when clicked
}
}
public static class MyCommands
{
public static RoutedUICommand MyCommand = new RoutedUICommand();
}
的样子:
我有一个问题,在CONTROLTEMPLATES &的DataTemplates按钮。我发现触发器通常太麻烦,无法准确提供我的客户想要的东西,最后我得到了太多的转换器。我第一次尝试的方法是定义这些更难的模板内联,以便他们可以绑定到我的屏幕ViewModel上的命令(&代码隐藏事件)。
如果你是模板化自己的控制,我要提到的最简单的方法是简单地命名按钮,然后用这样的:
hourHand = this.Template.FindName("PART_HourHand", this) as Rectangle;
然而,最近我已经改变了圆通(回indevidual文件..重新使用!),但开始添加一个ViewModel(各种),我后缀...TemplateCommandStore
到所有我的模板有点复杂。我甚至模板化时,我customcontrols(一致性,大部分)使用这个
public class BookingDetailsTemplateCommandStore
{
public OpenWindowCommand_Command OpenWindowCommand_Command { get; set; }
public BookingDetailsTemplateCommandStore()
{
OpenWindowCommand_Command = new OpenWindowCommand_Command(this);
}
}
然后我就可以开心地在模板中使用此命令。您还可以通过绑定(依赖性?)属性来将控件引用传递到命令存储区,以捕获事件&可以更精确地控制模板。
<DataTemplate DataType="{x:Type LeisureServices:BookingSummary}">
<Border Height="50" otherStyling="xyz">
<Border.Resources>
<local:BookingDetailsTemplateCommandStore x:Key="CommandStore" />
</Border.Resources>
<DockPanel>
<Button otherStyling="xyz"
Command="{Binding Source={StaticResource CommandStore},
Path=OpenWindowCommand_Command}" />
MVVM:我发现,只要图形化的逻辑就是这样,从业务逻辑完全不同,这种方法不会干扰MVVM。实质上,我为模板添加了一致的C#代码能力,任何花费太多时间在winform上的人都可能会像我一样错过。
- 1. 如何参考图像中的ControlTemplate
- 2. 参考一个类中的按钮ID
- 3. 如何,我得到一个单选按钮的值用JavaScript
- 4. 我如何获得一个按钮在MigLayout中右对齐
- 5. 我该如何参考一个函数?
- 6. 我的按钮没有回传?我有它绑在Javascript是绑在一个div
- 7. 我有一个按钮需要访问的单元格...我如何访问它?
- 8. 如何得到具体的数据,当我按下一个按钮
- 9. 我如何在Datalist中所有值与一个按钮asp.net/vb.net
- 10. 为什么我得到一个ClassCastException,我该如何解决它?
- 11. 我得到一个错误,我不知道如何解决它
- 12. 我有一个复选框列表,我如何得到它们的状态
- 13. 我得到一个PHP错误,我无法得到为什么我得到它
- 14. 我如何获得对所有托管线索的参考
- 15. 可可:当我有一个“id按钮”变量时如何得到按钮的类型
- 16. 如何System.Windows.Controls.Frame在我的项目添加到我的参考
- 17. Android按钮参考?
- 18. AS3参考按钮
- 19. 如何在我的网站上有一个SoundCloud Follow按钮?
- 20. 在jQuery中,我如何参考当前窗体从按钮单击
- 21. 我需要一个所有在一个lisp参考
- 22. RxJS可观察。如何让我重新发射一次,我有一个参考
- 23. 我得到一个EOF错误,我有固定它
- 24. 我该如何参考一个在Scala中没有实际意义的类?
- 25. 我的按钮上有一个阴影
- 26. 我如何参考我的FlowDocument
- 27. 我如何有一个SimpleListFilter功能的所有按钮
- 28. 我会如何把它变成一个按钮?
- 29. 我该如何做到这一点,当我有一个特定的按键,它会创建一个中断
- 30. C#:我如何得到一个按钮来调用自己一次,当使用其他3个按钮
很高兴知道更具体的信息 - 包括查看您的XAML并了解您的意图 - 以便我们可以更具体地回答我们的答案。 – 2008-10-08 21:15:56