我在wpf应用程序中有2个彼此独立的自定义控件。 但是,我有一些行为需要在两个类似的控件中复制。
例如,当用户拖放这两个控件中的任何一个时,我需要或多或少相同的行为来执行。
相同的行为还包括需要在两个控件之间共享的依赖项属性。
这是可能的,如果可以的话,如何设计呢?
基本上,当控件彼此独立时,如何跨控件共享依赖属性,以及共享某些行为?
答案 0 :(得分:0)
好吧,您可以从自定义基本控件继承这两个控件,这些控件具有两个控件所需的拖动逻辑。就像ListBox
和ComboBox
来自ItemsControl
一样。这样,他们共享相同的属性和行为。
如果这两个控件无法从同一个控件继承,那么就可以像许多控件实现的ICommandSource
一样实现一个通用接口。
答案 1 :(得分:0)
使用继承 - 创建一个公共基本控件,其中包含两个控件中需要相同的逻辑,然后在他们的XAML中使用如下内容:
<local:BaseClassName
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:YourNamespaceName"
mc:Ignorable="d"
x:Class="ChildControlClassName"
x:Name="ChildControlName"
d:DesignWidth="640"
d:DesignHeight="480"
>
...control XAML
</local:BaseClassName>
答案 2 :(得分:0)
或使用Attached DependencyProperties。在第三个类上声明你的属性 - 这里是你如何处理DoubleClicking(应该是相同的逻辑)的一个例子 - 让它更容易重用而不紧密耦合两个控件 - 特别是如果一个是Panel和其他一个ItemsControl:http://www.codeproject.com/Articles/42111/Selector-DoubleClick-Behaviour-calling-ViewModel-I.aspx