1

Создание моего первого приложения WPF, и у меня возникают проблемы с настраиваемым пользовательским элементом управления, который я создал. Пользовательский элемент управления - небольшая футбольная рубашка с дорожками и двумя ярлыками, одна для названия и одна для номера. В конечном итоге пользователь отрегулирует формирование команды с помощью этого элемента управления, но цвет заливки должен соответствовать выбранной команде. Я установил свойство зависимостей для заливки/кисти, которое, как я надеялся, могу редактировать в своем XAML, но заливка прозрачна независимо от того, какой цвет я тоже устанавливаю. Что я делаю не так? И это лучший способ сделать такой контроль, что я могу перетащить холст/падение на другие панели для обмена данными. Вот код:WPF VB - TemplateBinding Заполнение пользовательского пользовательского элемента управления и 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> 

ответ

1

Вы хотите использовать RelativeSource для этого.

В документации для TemplateBinding говорится, что вы можете использовать его только в определениях ControlTemplate.

Try переключения Fill="{TemplateBinding Custom:PlayerIcon.PlayerColour}" в

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

Вы на правильном пути AFAIK w.r.t к этому UserControl. У вас есть контроль. Теперь вы можете расширить функциональность и соответствующим образом привязать их к соответствующим битам.

на боковой ноте:

Хороший футбол Джерси Path кстати :) выглядит приятно

+0

Спасибо большое за ответ, я дам этому попытку завтра утром, и пусть вы знаете, как я ладить. Постскриптум Я использовал Illustrator для конвертера XAML для трикотажа! – rwmck

+0

@RyanMcKenna приветствие :) Вы знаете, что можете просто использовать Expression Blend для импорта файлов Illustrator * .ai в свой проект? вам не нужен внешний преобразователь. Blend также сохраняет все Artboards как элементы Canvas с дочерними элементами Path. Это то, что мы делаем тоже;) – Viv

+0

Это сработало! Привет, спасибо за все ваши замечательные советы. Это очень ценится. – rwmck

Смежные вопросы