У меня есть основной абстрактный класс только для кода BaseImpostorButton, наследующий UserControl. У меня есть дочерний класс ClickableImageButton с xaml и кодом программной части.
Я использую следующий стиль с ControlTemplate:
<Style TargetType="{x:Type local:ClickableImageButton}">
<Setter Property="ToolTipService.InitialShowDelay" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ClickableImageButton}">
<StackPanel Margin="{TemplateBinding Margin}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
При использовании в ListView в качестве необработанного ListViewItem мой ClickableImageButton отображается правильно.
НО: при использовании его в представлении списка с ItemTemplate DataTemplate ClickableImageButton больше не отображается... как если бы содержимое было пустым внутри DataTemplate.
Решение, которое я нашел, состояло в том, чтобы написать DependencyProperty ButtonContent на BaseImpostorButton и явно установить его в xaml.
Но может ли кто-нибудь объяснить этот вопрос?
РЕДАКТИРОВАТЬ: вот 2 разных xaml. Тот, который правильно показывает базовое изображение (ClickableImage - это изображение)
<ListView Grid.Row="1" Name="ListViewSections" ItemsSource="{Binding Path=Sections}" Background="{x:Null}" SizeChanged="ListViewSections_SizeChanged">
<ListViewItem>
<Grid MaxWidth="600">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="150"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="{Binding Path=Titre}" Margin="5,0,5,0" FontSize="18" FontWeight="Bold" Foreground="White" TextWrapping="Wrap" FontFamily="Arial" HorizontalAlignment="Left" />
<local:ClickableImageButton Grid.Row="1" Tag="{Binding Path=Id}" Grid.Column="0" ImpostorClick="Image_Click" Margin="10">
<local:ClickableImageButton.Content>
<local:ClickableImage Source="Content/tada.png" />
</local:ClickableImageButton.Content>
</local:ClickableImageButton>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Texte}" Margin="10,0,10,0" FontSize="16" Foreground="White" TextWrapping="Wrap" FontFamily="Arial" VerticalAlignment="Center" HorizontalAlignment="Left" />
</Grid>
</ListViewItem>
</ListView>
И тот, который не работает
<ListView Grid.Row="1" Name="ListViewSections" ItemsSource="{Binding Path=Sections}" Background="{x:Null}" SizeChanged="ListViewSections_SizeChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid MaxWidth="600">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="150"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="{Binding Path=Titre}" Margin="5,0,5,0" FontSize="18" FontWeight="Bold" Foreground="White" TextWrapping="Wrap" FontFamily="Arial" HorizontalAlignment="Left" />
<local:ClickableImageButton Grid.Row="1" Tag="{Binding Path=Id}" Grid.Column="0" ImpostorClick="Image_Click" Margin="10">
<local:ClickableImageButton.Content>
<local:ClickableImage Source="Content/tada.png" />
</local:ClickableImageButton.Content>
</local:ClickableImageButton>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Texte}" Margin="10,0,10,0" FontSize="16" Foreground="White" TextWrapping="Wrap" FontFamily="Arial" VerticalAlignment="Center" HorizontalAlignment="Left" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<local:ClickableImageButton Content="{Binding}" ... />
в своем DataTemplate? - person Clemens   schedule 18.01.2013<local:ClickableImageButton> <local:ClickableImageButton.Content><local:ClickableImage Source="{Binding Path=Image.Source}" /></local:ClickableImageButton.Content></local:ClickableImageButton>
- person Loul G.   schedule 18.01.2013Before deriving from UserControl, consider that your control will not support templates.
Но это несколько странно... Это подразумевает, что UserControl не имеет того же поведения, что и его базовый класс... - person Loul G.   schedule 20.01.2013<ContentPresenter />
. Я также получил свой BaseImpostorButton от ContentControl вместо UserControl. Элемент управления по-прежнему не отображается при использовании внутри шаблона... - person Loul G.   schedule 28.01.2013FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseImpostorButton), new FrameworkPropertyMetadata(typeof(BaseImpostorButton)));
- person Loul G.   schedule 28.01.2013