正しい方法を使用していないかどうかわからないので、ここで私のケースを説明しようと思います。詳細を指摘するのを手伝ってください。
私の目的は、WPFPopup
クラスをカスタマイズし、特定のポップアップパネルを実装することです。CustomControlを使用して、これを次のように実装します。
これがGeneric.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3">
<Style TargetType="{x:Type local:CCPopup}">
<Setter Property="AllowsTransparency" Value="True" />
<Setter Property="StaysOpen" Value="False" />
<Setter Property="Placement" Value="Center" />
<Setter Property="Child">
<Setter.Value>
<Border Background="Red"
Width="30"
Height="30" />
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
以下は、メタスタイル情報のみを登録するコードです。
public class CCPopup : Popup
{
static CCPopup()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CCPopup), new FrameworkPropertyMetadata(typeof(CCPopup)));
}
}
私がこれまでに遭遇した問題は、以下のように要約することができます。
1)私は書き込もうとします:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3">
<Style TargetType="{x:Type local:CCPopup}" BasedOn="{StaticResource {x:Type Popup}}">
<Setter Property="AllowsTransparency" Value="True"/>
<Setter Property="StaysOpen" Value="False" />
<Setter Property="Placement" Value="Center" />
<Setter Property="Child">
<Setter.Value>
<Border Background="Red"
Width="30"
Height="30" />
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
しかし、これは機能せず、エラー{x:Type Popup}
を解決できませんでした。なんで?
MainWindow.xamlについて:<CCPopup x:Key="popup" />
リソースを追加してボタンを作成するだけです。ボタンをクリックすると、ポップアップがこのボタンにバインドされ、コードでPlacementTarget
ポップアップのIsOpen
プロパティがtrueに設定されます。
2)などのコードでCCPopupのインスタンスを作成すると、およびなどのCCPopup p = new CCPopup()
一部のスタイルが機能せず、 xamlスタイルで指定した値に設定されません。しかし、xamlからインスタンスを作成し、コード内のリソースからインスタンスを参照すると、スタイルは正しく機能します。私がどこを間違えたのか指摘できますか?AllowsTransparency
StaysOpen
<CCPopup x:Key="popup" />
Popup
3)クラスにプロパティがない理由に興味がありTemplate
ますか?
ご協力いただきありがとうございます。