我只是想啓用或禁用我使用的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. Tkinter的,如何參考保存到我是從一個按鈕
- 2. 如何參考圖像中的ControlTemplate
- 3. 參考一個類中的按鈕ID
- 4. 按鈕刷新頁面,如果我有得到的參數
- 5. 如何,我得到一個單選按鈕的值用JavaScript
- 6. 一個按鈕,並在參考
- 7. 我如何獲得一個按鈕在MigLayout中右對齊
- 8. 我該如何參考一個函數?
- 9. 我的按鈕沒有回傳?我有它綁在Javascript是綁在一個div
- 10. 我有一個按鈕需要訪問的單元格...我如何訪問它?
- 11. Cakephp:我如何參考另一個表中的字段,而我有主鍵
- 12. 如何得到具體的數據,當我按下一個按鈕
- 13. 參考一個按鈕然後配置它
- 14. 我如何在Datalist中所有值與一個按鈕asp.net/vb.net
- 15. 我如何在Groovy中執行等於參考的參考?
- 16. 我得到一個錯誤,我不知道如何解決它
- 17. 爲什麼我得到一個ClassCastException,我該如何解決它?
- 18. 如何在默認鍵盤上放置一個按鈕?我想要一個按鈕,當它被按下時,它有機會到另一個活動
- 19. 如何有效地使用OOP?我可以得到一些參考
- 20. 我有一個複選框列表,我如何得到它們的狀態
- 21. 我得到一個PHP錯誤,我無法得到爲什麼我得到它
- 22. 如何在我的一個viewpager頁面訪問我的按鈕?
- 23. 如何識別按鈕的參考
- 24. Facebook分享按鈕 - 查看「共享者」得到的有多少個參考
- 25. 我如何獲得對所有託管線索的參考
- 26. 如何System.Windows.Controls.Frame在我的項目添加到我的參考
- 27. 可可:當我有一個「id按鈕」變量時如何得到按鈕的類型
- 28. 如何在我的網站上有一個SoundCloud Follow按鈕?
- 29. 在jQuery中,我如何參考當前窗體從按鈕單擊
- 30. Android按鈕參考?
很高興知道更具體的信息 - 包括查看您的XAML並瞭解您的意圖 - 以便我們可以更具體地回答我們的答案。 – 2008-10-08 21:15:56