我已经创建了一个这样的自定义WPF控件:
我将此WPF控件放在我的Form1(Windows窗体)中,并为其编写了一个事件MouseEnter。我期望这里是获取WPF控件内的按钮名称。我在Form1中只使用了1个WPF控件。但我在Form1中有24个WPF控件。我使用 foreach 遍历所有 ElementHost (WPF控件)并将每个 ElementHost 的子项转换为WPF控件。我有一个问题是将ElementHost转换为WPF控件。
这是我的代码:
public Form1()
{
InitializeComponent();
foreach (ElementHost c in this.Controls)
{
TP1WPFControls.TP1CustomButton bt = c.Child as TP1CustomButton;
bt.bt.MouseEnter += Bt_MouseEnter;
bt.bt.MouseLeave += Bt_MouseLeave;
}
//TP1WPFControls.TP1CustomButton btnCustom = elementHost1.Child as TP1CustomButton;
//btnCustom.bt.Click += Bt_Click;
//btnCustom.bt.MouseEnter += Bt_MouseEnter; ;
//btnCustom.bt.MouseLeave += Bt_MouseLeave; ;
}
希望每个人都能为我提供解决方案。
谢谢!
答案 0 :(得分:1)
您需要遍历表单控件,但并非所有这些都是元素主机:
每个Windows窗体控件都基于System.Windows.Forms.Control,包括ElementHost。所以,在循环中,你试图强制转换。如果它不为null,您知道它是一个ElementHost,那么您可以在ElementHost上执行代码。
function getMonthlyTotalsByResource_(query) {
var allRecordsQuery = app.models.Allocations.newQuery();
allRecordsQuery.filters.Approved._equals = true;
allRecordsQuery.filters.Resource.Manager.ManagerName._equals =
query.parameters.ManagerName;
var allRecords = allRecordsQuery.run();
答案 1 :(得分:0)
非常感谢@ Ctznkane525。我试图将MouseLeave和MouseEnter事件中的发送者转换为WPF自定义控件中每个控件的类型,并且它已经工作了!因为我的TPCustomButton只是一个WPF控件,所以我必须为每个上面的事件转换每个控件。
我已经编辑了我的答案以获取完整信息:
public Form1()
{
InitializeComponent();
foreach (Control c in this.Controls)
{
ElementHost e = c as ElementHost;
if (e != null)
{
TP1WPFControls.TP1CustomButton btWPF = e.Child as TP1CustomButton;
if (btWPF != null)
{
//bt.bt.MouseLeave += Bt_MouseLeave;
//bt.lbl.MouseLeave += Lbl_MouseLeave;
btWPF.MouseLeave += Bt_MouseLeave;
}
}
}
}
private void Bt_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
TP1CustomButton btCustom = sender as TP1CustomButton;
brushcolor = new brushColor(mediaColor.FromRgb(221, 247, 190));
btCustom.bt.Background = brushcolor;
btCustom.lbl.Background = brushcolor;
}