小编got*_*pie的帖子

通过反射为任何事件类型订阅操作

考虑:

someControl.Click += delegate { Foo(); };
Run Code Online (Sandbox Code Playgroud)

事件的论点是无关紧要的,我不需要它们,我对它们不感兴趣.我只想让Foo()被调用.通过反射没有明显的方法来做同样的事情.

我想将上述内容翻译成类似的内容

void Foo() { /* launch missiles etc */ }

void Bar(object obj, EventInfo info)
{
    Action callFoo = Foo;
    info.AddEventHandler(obj, callFoo);
}
Run Code Online (Sandbox Code Playgroud)

此外,我不想假设传递给Bar的对象类型严格遵守使用事件的EventHander(TArgs)签名的指导原则.简而言之,我正在寻找一种方法来将Action订阅到任何处理程序类型; 不那么简单,一种将Action委托转换为预期处理程序类型的委托的方法.

.net c# reflection events delegates

11
推荐指数
1
解决办法
2278
查看次数

TabControl的TabItems共享相同的内容......不想要

以下示例xaml使每个选项卡项共享相同的TextBox.这是有道理的,在某种程度上我猜...但它是意想不到的行为,几乎感觉就像一个bug.我在文档中找不到任何解释行为的信息,或者如何正确解决这个问题.

<TabControl>
    <TabControl.Resources>
        <Style TargetType="TabItem">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBox />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>
    <TabItem Name="tab1" />
    <TabItem Name="tab2" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)

当在tab1和tab2之间切换时,使用相同的TextBox,当我期望每个选项卡有一个新的TextBox时.我怎样才能得到后一种情况?

对TabItem进行子类化并将其内容默认设置为TextBox是一种方法,但我只是想确保没有我遗漏的东西.

编辑

我意识到为每个选项卡显式设置内容将解决问题,但选项卡将动态创建.我想使用内容模板,以便我可以通过数据绑定添加新选项卡,并使内容不共享,因为它会导致奇怪的行为.

也许使用TabControl的当前实现,没有声明方法来解决这个问题.在代码中设置内容非常简单,但在WPF中这样的事情总是感觉不对.对我来说,这似乎是TabControl的不合理优化; 对于不实用的情况,它至少应该是可选的.

wpf tabcontrol

10
推荐指数
1
解决办法
7881
查看次数

可变大小的所有者绘制ComboBox; 列表没有正确调整大小

我从ComboBox派生了一个类,使其成为一个所有者绘制的列表框(DrawMode.OwnerDrawVariable样式),并通过重写OnMeasureItem和OnDrawItem,我将特殊项添加到下拉列表(例如,分隔符)中,它们更小/更大大小比控制中的常规项目大.

现在,我遇到并且似乎无法有效解决的问题是下拉列表的大小调整:当列表下降时,列表末尾有一个丑陋的空白区域.我想我通过设置组合框的所有项目高度的总和的DropDownHeight财产解决这一问题,但是似乎并没有工作,所有的时间.有时,在随机数量的项目上,空白空间的厄运会返回.这是一个不寻常的问题,但希望是一个常见且易于修复的问题.

如何让ComboBox的下拉列表精确调整到其内部项目占用的大小?

.net c# combobox winforms

5
推荐指数
1
解决办法
2730
查看次数

标签 统计

.net ×2

c# ×2

combobox ×1

delegates ×1

events ×1

reflection ×1

tabcontrol ×1

winforms ×1

wpf ×1