【问题标题】:Dependency property: how to design依赖属性:如何设计
【发布时间】:2010-08-02 11:28:54
【问题描述】:

我在 wpf 应用程序中有 2 个相互独立的自定义控件。 但是,我有一些行为需要在两个相似的控件中复制。

例如,当用户在这两个控件中的任何一个上拖放时,我需要或多或少相同的行为来执行。

同样的行为还包括需要在 2 个控件之间共享的依赖属性。

这可能吗?如果可以,如何设计?

所以基本上,当控件彼此独立时,我如何在控件之间共享依赖属性,同时也共享一些行为?

【问题讨论】:

    标签: wpf c#-3.0 wpf-controls dependency-properties


    【解决方案1】:

    好吧,您可以从自定义基本控件继承这两个控件,该控件具有您在这两个控件中都需要的拖动逻辑。就像 ListBoxComboBox 派生自 ItemsControl 一样。这样,它们共享相同的属性和行为。

    如果这两个控件不能继承自同一个控件,你可以实现一个通用接口,就像ICommandSource一样,由很多控件实现。

    【讨论】:

      【解决方案2】:

      使用继承 - 创建一个公共基础控件,其中包含您需要在两个控件中相同的逻辑,然后在它们的 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>
      

      【讨论】:

        【解决方案3】:

        或者使用附加的依赖属性。在第三个类上声明你的属性 - 这是一个如何处理 DoubleClicking 的示例(应该是相同的逻辑) - 在不紧密耦合两个控件的情况下更容易重用 - 特别是如果一个是 Panel 和其他 ItemsControl:http://www.codeproject.com/Articles/42111/Selector-DoubleClick-Behaviour-calling-ViewModel-I.aspx

        【讨论】:

          猜你喜欢
          • 2013-08-12
          • 1970-01-01
          • 2014-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多