1

初めての WPF アプリケーションを作成していますが、作成したカスタム ユーザー コントロールに問題があります。カスタム コントロールは、パスと 2 つのラベル (1 つは名前用、もう 1 つは番号用) で作成された小さなサッカー シャツです。最終的に、ユーザーはこのコントロールを使用してチームのフォーメーションを調整しますが、塗りつぶしの色は選択したチームと一致する必要があります。XAML で編集できると思っていた塗りつぶし/ブラシの依存関係プロパティを設定しましたが、設定した色に関係なく塗りつぶしが透明になります。私は何を間違っていますか?そして、これは、キャンバスの周りをドラッグしたり、他のパネルにドロップしてデータを交換したりできるようなコントロールを作成するための最良の方法です。コードは次のとおりです。

PlayerIcon.xaml -

<UserControl x:Class="PlayerIcon"
         x:Name="PlayerIcon"
         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:Custom="clr-namespace:RowZedPlus"
         mc:Ignorable="d" 
         d:DesignHeight="60" d:DesignWidth="100">
<Grid x:Name="LayoutRoot" HorizontalAlignment="Center">

    <Grid.RowDefinitions>
        <RowDefinition Height="19"></RowDefinition>
        <RowDefinition Height="0"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" HorizontalContentAlignment="Center" Background="Transparent" Foreground="White">
        <TextBlock Name="PlayerName" Foreground="White" FontSize="8">
            HELLO
        </TextBlock>
    </Label>

    <Canvas Margin="0,0,40,0" HorizontalAlignment="Center" Grid.Row="1">
        <!-- Jersey/Main Shirt -->
        <Path x:Name="PlayerShirt" Stroke="#ff000000" Fill="{TemplateBinding Custom:PlayerIcon.PlayerColour}" StrokeMiterLimit="1.0" Data="F1 M 0.899,9.143 C 0.899,9.143 3.484,14.188 3.984,17.000 C 6.484,15.562 9.984,15.562 9.984,15.562 L 9.984,37.625 C 9.984,37.625 25.297,40.438 31.672,37.625 C 31.609,29.250 31.672,15.562 31.672,15.562 C 31.672,15.562 35.922,15.812 37.234,16.812 C 37.234,16.812 37.554,12.941 40.421,9.253 L 24.386,3.357 C 23.526,6.286 20.586,8.812 20.586,8.812 C 20.586,8.812 18.047,6.857 16.922,3.500 C 16.922,3.500 2.790,8.143 0.899,9.143 Z">
        </Path>
        <!-- Jersey/Left Sleeve -->
        <Path StrokeThickness="0.5" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="White" Data="F1 M 1.484,9.000 C 1.484,9.000 4.109,15.230 5.984,16.168 L 3.734,17.250 C 3.734,17.250 0.250,13.188 0.250,9.375 L 1.484,9.000 Z"/>
        <!-- Jersey/Right Sleeve -->
        <Path StrokeThickness="0.5" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="White" Data="F1 M 39.688,9.000 C 39.688,9.000 37.062,15.230 35.188,16.168 L 37.438,17.250 C 37.438,17.250 40.922,13.188 40.922,9.375 L 39.688,9.000 Z"/>
        <!-- Jersey/Left Collar -->
        <Path StrokeThickness="0.5" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="White" Data="F1 M 16.922,3.500 L 14.711,4.244 C 14.711,4.244 16.672,9.438 18.109,10.500 L 20.586,8.812 C 20.586,8.813 17.109,5.875 16.922,3.500 Z"/>
        <!-- Jersey/Right Collar -->
        <Path StrokeThickness="0.5" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="White" Data="F1 M 24.386,3.357 L 26.504,4.136 C 26.504,4.136 24.636,9.294 23.198,10.357 L 20.734,8.750 C 20.734,8.750 24.198,5.732 24.386,3.357 Z"/>
        <!-- Jersey/Bottom Shirt -->
        <Path StrokeThickness="0.5" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="White" Data="F1 M 9.984,36.875 C 17.172,38.688 25.609,38.812 31.734,36.875 L 31.734,37.938 C 25.922,40.312 18.160,40.312 9.984,37.938 C 9.984,37.938 9.984,37.188 9.984,36.875 Z"/>
        <!-- Jersey/<Path> -->
        <Path StrokeThickness="0.5" Stroke="#fffb02ef" StrokeMiterLimit="1.0" Data="F1 M 7.422,45.375"/>

        <Label HorizontalContentAlignment="Center" Background="Transparent" Foreground="#FFED0606">
            <TextBlock Name="PlayerNumber" Margin="5,5,0,0" Foreground="White" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center">
            </TextBlock>
        </Label>
    </Canvas>



</Grid>

PlayerIcon.xaml.vb -

Partial Public Class PlayerIcon

Public Shared ReadOnly PlayerColourProperty As DependencyProperty = _
                   DependencyProperty.Register("PlayerColour", _
                   GetType(Brush), GetType(PlayerIcon), _
                   New FrameworkPropertyMetadata(Brushes.Red))

Public Property PlayerColour() As Brush
    Get
        Return GetValue(PlayerColourProperty)
    End Get

    Set(ByVal value As Brush)
        SetValue(PlayerColourProperty, value)
    End Set
End Property

End Class

MainWindow.xaml -

<Custom:PlayerIcon PlayerColour="Green"></Custom:PlayerIcon>
<Custom:PlayerIcon Canvas.Left="300" PlayerColour="Purple"></Custom:PlayerIcon>
4

1 に答える 1

1

RelativeSourceこれにはバインディングを使用したいと考えています。

TemplateBindingのドキュメントに記載されているように、定義でのみ使用できControlTemplateます。

に切り替えFill="{TemplateBinding Custom:PlayerIcon.PlayerColour}"てみてください

Fill="{Binding RelativeSource={RelativeSource FindAncestor,
                                              AncestorType={x:Type Custom:PlayerIcon}},
                Path=PlayerColour}"

あなたはこれに対して正しい道を歩んでいますUserControl。コントロールが抽象化されました。機能を拡張し、それに応じてそれらを対応するビットに結び付けることができるようになりました。

補足:

素敵なサッカージャージーPathところで:)素敵に見えます

于 2013-04-29T15:49:46.113 に答える