2017-05-19 1 views
0

Es ist ein WPF-Programm. Ich zeichne eine Ellipse nach C# -Code, dann Einfügen in Gitter Children. Es befindet sich bei TreeViewItem.Warum zeichne ich eine Ellipse im Raster wird blockiert?

Ich sehe nur der Teil der Ellipse an der Vorderseite muss durch Länge konvertiert werdenConverter.

Xmal style:

<Style x:Key="{x:Type TreeViewItem}" 
      TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="Background" 
       Value="Transparent"/> 
     <Setter Property="HorizontalContentAlignment" 
       Value="{Binding Path=HorizontalContentAlignment, 
       RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="VerticalContentAlignment" 
       Value="{Binding Path=VerticalContentAlignment, 
       RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="Padding" 
       Value="1,0,0,0"/> 
     <Setter Property="Foreground" 
       Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="FocusVisualStyle" 
       Value="{StaticResource TreeViewItemFocusVisual}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
        <ControlTemplate.Resources> 
         <converters:LeftMarginMultiplierConverter Length="19" x:Key="lengthConverter" /> 
        </ControlTemplate.Resources> 
        <StackPanel> 
         <Border Name="Bd" 
           Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Padding="{TemplateBinding Padding}"> 
          <Grid Name="Gd" Margin="{Binding Converter={StaticResource lengthConverter}, 
           RelativeSource={RelativeSource TemplatedParent}}"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="19" /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <ToggleButton x:Name="Expander" 
               Style="{StaticResource ExpandCollapseToggleStyle2}" 
               IsChecked="{Binding Path=IsExpanded, 
           RelativeSource={RelativeSource TemplatedParent}}" 
               ClickMode="Press"/> 

           <ContentPresenter x:Name="PART_Header" 
                Grid.Column="1" 
                ContentSource="Header" 
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
          </Grid> 
         </Border> 
         <ItemsPresenter x:Name="ItemsHost" /> 
        </StackPanel> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsExpanded" 
           Value="false"> 
          <Setter TargetName="ItemsHost" 
            Property="Visibility" 
            Value="Collapsed"/> 
         </Trigger> 
         <Trigger Property="HasItems" 
           Value="false"> 
          <Setter TargetName="Expander" 
            Property="Visibility" 
            Value="Hidden"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="HasHeader" 
              Value="false"/> 
           <Condition Property="Width" 
              Value="Auto"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="PART_Header" 
            Property="MinWidth" 
            Value="75"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="HasHeader" 
              Value="false"/> 
           <Condition Property="Height" 
              Value="Auto"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="PART_Header" 
            Property="MinHeight" 
            Value="19"/> 
         </MultiTrigger> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter TargetName="Bd" 
            Property="Background" 
            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"></Setter> 
         </Trigger> 
         <Trigger Property="IsSelected" 
           Value="true"> 
          <Setter TargetName="Bd" 
            Property="Background" 
            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
          <Setter Property="Foreground" 
            Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" 
              Value="true"/> 
           <Condition Property="IsSelectionActive" 
              Value="false"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="Bd" 
            Property="Background" 
            Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
          <Setter Property="Foreground" 
            Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
         </MultiTrigger> 
         <Trigger Property="IsEnabled" 
           Value="false"> 
          <Setter Property="Foreground" 
            Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

C# Code:

var item = sender as TreeViewItem; 
    if (item.Items.Count > 0) return; 
    var controlTemplate = item.Template as ControlTemplate; 
    var grid=controlTemplate.FindName("Gd",item) as Grid; 
    var p = args.GetPosition((IInputElement)item); 
    var elli = new Ellipse 
    { 
     Width = 0, 
     Height = 0, 
     Fill = Brushes.White, 
     HorizontalAlignment = HorizontalAlignment.Left, 
     VerticalAlignment = VerticalAlignment.Top, 
     Opacity = .6 
    }; 
    grid.Children.Insert(0,elli); 
    var animation = new DoubleAnimation(0, new Duration(TimeSpan.FromMilliseconds(400))); 
    animation.Completed += (s, e1) => 
    { 
     grid.Children.Remove(elli); 
    }; 
    elli.BeginAnimation(OpacityProperty, animation); 
    elli.BeginAnimation(HeightProperty, new DoubleAnimation(600, new Duration(TimeSpan.FromMilliseconds(400)))); 
    elli.BeginAnimation(WidthProperty, new DoubleAnimation(600, new Duration(TimeSpan.FromMilliseconds(400)))); 
    elli.BeginAnimation(MarginProperty, new ThicknessAnimation(new Thickness(p.X, p.Y, 0, 0), new Thickness(p.X - 300, p.Y - 300, 0, 0), new Duration(TimeSpan.FromMilliseconds(400)))); 
+1

Sie haben nicht genug für jeden zur Verfügung gestellt, um dies herauszufinden. Der C# -Code befindet sich in einem Handler. Welcher Handler? Die Variable "args" ist nicht definiert. Im XAML ist "LeftMarginMultiplierConverter" nicht definiert. Sie müssen entweder vereinfachen oder mehr bereitstellen, um eine Antwort zu erhalten. – AQuirky

Antwort

0

Da ich die Ellipse in der ersten Spalte des Rasters einzufügen. Ich habe die Spalte gesetzt, um es zu lösen.

Verwandte Themen