2

次の疑似 XAML コードとして表示できる UserControl (複合コントロール) があります。

<UserControl>
  <DockPanel>
    <TextBox />
    <Button />
  </DockPanel>
</UserControl>

このカスタム コントロールをさまざまな場所で使用し、その一部を WPF スタイルでスタイルします。このスタイルは、UserControl の Background プロパティを色に設定します。しかし、この背景色は UserControl の背景面に描画されますが、TextBox コントロールの背景だけに描画したいのです。これは私が得るものです(色=赤):

代替テキスト http://img261.imageshack.us/img261/8600/62858047wi3.png

UserControl の Background プロパティを TextBox コントロールの background プロパティにバインドすると、次のようになります。

代替テキスト http://img111.imageshack.us/img111/1637/30765795kw5.png

現在は、内側の TextBox コントロールの背景も描画されますが、UserControl の背景色はまだ存在します。UserControl の背景の絵を削除する方法はありますか?

4

2 に答える 2

5

これを行う方法はいくつかありますが、ユーザー コントロールで独自のプロパティを公開し、ユーザー コントロール内のプロパティにバインドすることをお勧めします。例えば:

<UserControl x:Name="_root" ...>
    ...
    <Button Background="{Binding ButtonBackground, ElementName=_root}"/>
</UserControl>

別の方法は、の背景色を明示的に設定するTextBoxことです。

于 2008-10-07T13:25:48.183 に答える
1

私はケントに同意します。この問題を解決する方法はいくつかあります。

しかし、UserControl で Style を使用して TextBox の Background を設定するのはどうでしょうか? 以下がうまくいかない特別な理由はありますか?

<UserControl
    x:Class="StackOverflowQuestion.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300"
    Width="300"
>
    <UserControl.Resources>
        <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </UserControl.Resources>
    <DockPanel>
        <TextBox Text="Test" Style="{StaticResource textBoxStyle}"/>
        <Button/>
    </DockPanel>
</UserControl>

ユーザー コントロールに設定されたプロパティを本当に利用して、ユーザー コントロールの内部に影響を与えたい場合は、Kent の提案に 1 つの変更を加えて従います。代わりに TextBox の Background をバインドして、ユーザーがユーザー コントロールに設定した Background Brush が Button に流れる (プロパティ値の継承) ようにします。または、言い換えれば、TextBox の背景は、実際にあなたが変えようとしているものです。

<UserControl x:Name="_root" ...>
    <TextBox Background="{Binding TextBoxBackground, ElementName=_root}"/>
    <Button/>
</UserControl>
于 2008-10-07T14:16:56.770 に答える