1

カスタム コード ビハインドを持ち、UserControl から継承する BaseUserControl を作成する必要があるため、実際に使用される UserControl の ParrentClass として使用できます。たくさんの記事を読みましたが、それを機能させることができません。BaseUserControl は、デザイン要素を持つことは想定されていませんが、それを継承する他の UserControls で使用される参照のような純粋にカスタムのものがありますが、デザイン要素は優先されます。このような baseUseControls がさらに必要になるため、Exstensions は問題外です。BaseUsercontrol は 1 つのプロジェクトにあり、それを継承する残りは別のプロジェクトにあります。

1) 継承するクラスだけを作成しようとしました。

public class EntryUserControlBase:UserControl
{
    public EntryUserControlBase()
    {

    }
}

2) UserControl からの継承も

<UserControl x:Class="SPIS_Base.EntryUserControlBase"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>

    </Grid>
</UserControl>

こんな感じで継承してみました

<local:EntryUserControlBase x:Class="SPIS.AppControls.uclLogin"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:local="clr-namespace:SPIS_Base;assembly=SPIS_Base"
         mc:Ignorable="d" 
         d:DesignHeight="200" d:DesignWidth="300">
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ShowGridLines="False">

    </Grid>
</local:EntryUserControlBase>  

その方法を説明している記事をたくさん見つけましたが、実行できません。

任意のヒント?

4

2 に答える 2

0

以下を使用して、ユーザーコントロールの基本プロパティと関数を継承しています。

//Base class
using System.Windows.Controls;
namespace Controls
{
    public class BaseUserControl: UserControl
    {
        protected string getText()
        {
            return "Hello World";
        }
    }
} 

//Sub class
<Controls:BaseUserControl x:Class="MyNameSpace.MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:Controls="clr-namespace:Controls;assembly=MyAssembly">
</Controls:BaseUserControl>

using Controls;
public partial class MyUserControl : BaseUserControl
{
    public MyUserControl ()
    {
        var baseText = getText();
    }
}
于 2013-05-10T11:43:23.537 に答える
0

WPF では、基本クラスに設計された UI (この場合は XAML 定義) がある WinForms で実現できるような、この種の「視覚的な継承」は許可されません。デザイナーを生成する方法のため、これは WinForms でのみ機能しましたUserControl または Form コンテンツを構築するためのコード。XAML の解析はまったく異なるアプローチであり、2 つの XAML ファイルの内容を「マージ」することは明確に定義された操作ではありません。

WPF で同じ種類の目標を達成するためのさまざまな合成方法があります。いくつかの例:

  1. Control Templateを適切にサポートするカスタム コントロール (UserControl ではない) を作成します。これにより、コントロールに埋め込まれた「コンテンツ」を配置する場所など、拡張性のポイントを定義できます。

  2. 「基本」プロパティを UserControl に適用できるスタイルを定義します。これは、完全なコントロール テンプレートの設計よりも柔軟性が低くなりますが、実装は簡単です。

于 2013-05-09T17:43:23.703 に答える