2010-08-31 15 views
2

J'ai une question (j'espère) intéressante.Dépassement de canevas dans WPF

tout d'abord ce que je suis en train de faire ici:

Je suis en train de créer un jeu comme camembert de boutons, plus tard ce contrôle sera utilisé dans une touche application activée. Le contrôle dessine et semble très bien, aussi tous les comportements sont bien jusqu'à présent. Cependant, une chose que j'ai des problèmes avec les traductions que je fais à tous les morceaux de la tarte. Donc ce que je fais est: Je veux une marge n entre les morceaux de tarte, pour créer cette marge je déplace tous les morceaux du milieu. Cela signifie que le morceau de tarte face à UP aura une traduction négative. Cela signifie que le Canvas écrêtera une partie du haut (en raison du sommet étant à 14, -2 par exemple). Une autre chose que j'ai ajoutée sont des morceaux de texte qui rendent également les morceaux de tarte un peu plus longs. Voir l'image incluse pour référence.

image

Pour la gauche, vous pouvez voir le problème de clipping je parle à droite, vous pouvez voir une version traduite de façon arbitraire la même chose.

Une partie du code pâte:

fenêtre principale XAML:

<controls:PieMenu Radius="100" Padding="10"> 
<controls:PieMenu.MenuItems> 
    <controls:PieMenuItem Text="Employment" Brush="#FF33FF" Command="BrowseBack" /> 
    <controls:PieMenuItem Text="General" Brush="#9933FF" Command="BrowseBack" /> 
    <controls:PieMenuItem Text="Internships" Brush="#3333FF" Command="BrowseBack" /> 
    <controls:PieMenuItem Text="Bla" Brush="#3399FF" Command="BrowseBack" /> 
    <controls:PieMenuItem Text="Bla" Brush="#007AF5" Command="BrowseBack" /> 
</controls:PieMenu.MenuItems> 

PieMenu XAML:

<UserControl x:Class="PieControlLibrary.PieMenu" 
     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:self="clr-namespace:PieControlLibrary" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <!-- <CollectionViewSource x:Name="menuItemCollectionViewSource" Source="{Binding MenuItems, RelativeSource={RelativeSource AncestorType=self:PieMenu}}"/>--> 
    <Style TargetType="{x:Type ListView}" x:Key="listViewStyle"> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <self:PieButton Radius="{Binding Radius, RelativeSource={RelativeSource AncestorType=self:PieMenu}}" 
            Degrees="{Binding Degrees, RelativeSource={RelativeSource AncestorType=self:PieMenu}}" 
            Brush="{Binding Brush}" 
            Command="{Binding Command}" 
            Text="{Binding Text}"/> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 
<Grid> 
    <ListView x:Name="menuItemsView" ItemsSource="{Binding MenuItems, RelativeSource={RelativeSource AncestorType=self:PieMenu}}" Style="{StaticResource listViewStyle}" /> 
</Grid> 

PieButton (c'est ce que le menu tarte articles sont convertis en)

<UserControl x:Class="PieControlLibrary.PieButton" 
     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:control="clr-namespace:PieControlLibrary" 
     xmlns:TextOnPath="clr-namespace:Petzold.TextOnPath" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
     > 
<Grid> 
    <Button HorizontalAlignment="Left" VerticalAlignment="Top" DataContext="{Binding RelativeSource={RelativeSource AncestorType=control:PieButton}}" Command="{Binding Command}"> 
     <Button.Template> 
      <ControlTemplate> 
       <Canvas > 
        <Path Data="{Binding PathData}" Fill="{Binding Brush}" Grid.Row="0" Grid.Column="0" /> 
        <TextOnPath:TextOnPathControl PathFigure="{Binding TextPath}" Text="{Binding Text}" FontFamily="Consolas" FontSize="12" Foreground="Black" FontStretch="Normal" /> 
       </Canvas> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</Grid> 

Répondre

0

Je ne sais pas si je comprends bien votre question, mais quand vous dessinez votre diagramme circulaire, laisse juste un peu d'espace supplémentaire autour des bords de sorte que vous pouvez déplacer les morceaux de tarte hors du centre?

+0

Je laisse de l'espace supplémentaire, le problème majeur est que je ne sais pas combien d'espace supplémentaire à ajouter. Donc, si quelqu'un a des moyens de mesurer la taille du texte ou des éléments visuels (ou des combinaisons d'éléments), j'aimerais savoir comment cela peut être fait. – BadGuy

0

Peut-être que vous pourriez utiliser un RenderTransform lorsque vos morceaux de tarte se développent pour déplacer ou mettre à l'échelle l'image un tout petit peu pour la garder dans les limites?

+0

Désolé pour la réponse tardive (j'étais en vacances depuis deux semaines), le principal problème que j'ai avec cette solution est que je ne sais pas par combien il a redimensionné, et en plus de cela la taille du texte affiché autour c'est variable aussi. Donc, pour que l'une des suggestions fonctionne, j'ai besoin de savoir exactement quelle est la taille de tout. – BadGuy

+0

Il existe une propriété ActualHeight et ActualWidth que j'ai utilisée dans le passé lorsque la taille d'un objet change pendant l'exécution. Peut-être que vous pouvez l'utiliser d'une manière ou d'une autre? – Rachel

+0

Salut Rachel, j'ai essayé d'utiliser le problème mais c'est que le texte change d'échelle. Cependant, il est programmé pour réduire (à partir de 100 pt) pour une raison quelconque, la hauteur réelle est autour de la hauteur que vous attendez pour une police de 100 pt. Ou laissez-moi le dire de cette façon: il était douloureusement clair que la police ActualHeight (par rapport à la tranche que je savais était une certaine taille) la propriété était loin d'être ce qui devrait être la hauteur par comparaison visuelle. – BadGuy

Questions connexes