2

アートワークを含むシームレスな ImageButtons で WrapPanel を作成しようとしています。必要なシームレスな外観を提供することを期待して、次の ContentTemplate をまとめました。ただし、各ボタンの周りに細い白い線が残っていました。誰かが私を正しい方向に導くことができますか?

<Button.ContentTemplate>
    <DataTemplate DataType="{x:Type local:ArtInfo}">
        <Border Name="border" BorderThickness="0" BorderBrush="blue" Height="280" Width="250" Background="#262c40">
            <StackPanel>
                <Grid>
                    <Grid.Resources>
                        <local:MyConverter x:Key="MyConverter"></local:MyConverter>
                        <ObjectDataProvider x:Key="Properties.Settings" ObjectType="{x:Type lcl:Properties.Settings}" />
                    </Grid.Resources>
                    <Image Name="ArtImage" Margin="10,15,0,0" Height="195" Width="195" VerticalAlignment="Top" >
                        <Image.Source>
                                  <Binding Path="ArtImage"/>
                        </Image.Source>
                    </Image>
               </Grid>
            <TextBlock Text="{Binding Path=ArtClass}" Margin="10,-17,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="{Binding Path=Student}" Margin="10,0,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="1998" Margin="10,0,0,0" FontSize="11" Foreground="white" />
        </StackPanel>
    </Border>
    </DataTemplate>
</Button.ContentTemplate>
4

2 に答える 2

3

ContentTemplate は、ボタンにコンテンツを表示する方法を WPF に指示します。ボタン クロム (境界線や背景など) は残り、テンプレート化されたコンテンツはそのクロム内およびその上に表示されます。

コンテンツの表示方法をカスタマイズするだけでなく、ボタン、境界線、およびすべての外観全体を置き換えたいと考えています。これを行うには、代わりに Template プロパティを使用する必要があります。Button.Template の値は、DataTemplate ではなく ControlTemplate です。その ControlTemplate 内で、ContentPresenter を使用して「データ テンプレート」コンテンツを表示できます。

あなたの場合、 DataTemplate がすべての作業を行っているため、生の ContentPresenter をテンプレートとして使用できます。

<Button.Template>
  <ControlTemplate TargetType="Button">
    <ContentPresenter />
  </ControlTemplate>
</Button.Template>

ただし、すべてのボタンが同じ背景を使用している場合は、これを ControlTemplate に移動できます。

<Button.Template>
  <ControlTemplate TargetType="Button">
    <Border BorderBrush="Blue" ...>
      <ContentPresenter />
    </Border>
  </ControlTemplate>
</Button.Template>

その後、DataTemplate から Border を削除できます。これは、同じ Button.Template を他のコンテンツ テンプレートで再利用する予定があり、異なる種類のコンテンツ間で Button の外観の一貫性を保ちたい場合にのみ問題になります。

于 2010-04-03T20:22:21.700 に答える
0

ユーザーコントロールを作成し、ボタンと画像をグリッドに配置します。

<Grid>
  <Image Source="icon.png" Panel.ZIndex="1" />
  <Button 
    Panel.ZIndex="2" 
    FocusVisualStyle="{x:Null}" 
    Background="Transparent"/>
</Grid> 
于 2011-11-02T23:28:49.233 に答える