wpf treeviewitem 图片可视范围内永远居右。滚动条往右拉,图片继续居右

前台:

<HierarchicalDataTemplate ItemsSource="{Binding Path=Value}">
        <TextBlock></TextBlock>
        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <DockPanel Grid.Row="0" Grid.Column="0" Background="Transparent">
                        <Image DockPanel.Dock="Left"></Image>
                        <TextBlock DockPanel.Dock="Left"></TextBlock>
                    </DockPanel>
                    <DockPanel Grid.Row="0" Grid.Column="0" Name="dockpanelauto" Background="Transparent">
                        <DockPanel x:Name="dockpanelimage" Background="Transparent" HorizontalAlignment="Right" Height="26" Width="42">
                            <ToggleButton HorizontalAlignment="Left" Name="toggle" Height="20" Width="20"></ToggleButton>
                        </DockPanel>
                    </DockPanel>
                </Grid>
                <DataTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="toggle" Property="Visibility" Value="Visible"></Setter>
                        <Setter TargetName="dockpanelimage" Property="Background" Value="#EBF4FD"></Setter>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="false">
                        <Setter TargetName="toggle" Property="Visibility" Value="Hidden"></Setter>
                    </Trigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

后台:

private void itemborder_mousemove(object sender,MouseEventArgs e)
        {
            Border border = sender as Border;
            Grid grid = border.Child as Grid;
            Border bordertest = new Border();
            ContentPresenter con = bordertest.Child as ContentPresenter;
            if(con.Content !=null)
            {
                DependencyObject dependencyobject = VisualTreeHelper.GetChild(con, 0);
                DockPanel dockpanelborder = VisualTreeHelper.GetChild(dependencyobject, 0) as DockPanel;
                DockPanel dockpanelauto = VisualTreeHelper.GetChild(dependencyobject, 1) as DockPanel;
                System.Windows.Annotations.peers.TreeViewAutomationPeer lvap = new System.Windows.Annotations.peers.TreeViewAutomationPeer(tree);
                var svap = lvap.GetPattern(System.Windows.Annotations.Peers.PatternInterface.Scroll) as System.Windows.Annotations.Peers.ScrollViewerAutomationPeer;
                var scroll1 = svap.Owner as ScrollViewer;
                if (Isverticalscrollbarbutton(scroll1))
                {
                    dockpanelauto.Width = dockpanelborder.ActualWidth;
                }
                else
                {
                    if(scroll1.HorizontalOffset ==0)
                    {
                        dockpanelauto.Width = 388;
                    }
                    else
                    {
                        dockpanelauto.Width = this.ActualWidth - 123 + scroll1.HorizontalOffset;
                    }
                }
                dockpanelauto.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
            }
        }
        public bool Isverticalscrollbarbutton(ScrollViewer s)
        {
            bool isatbttom = false;
            double dver = s.HorizontalOffset;
            double dviewport = s.ViewportWidth;
            double dextent = s.ExtentWidth;
            if (dver != 0 && dver + dviewport == dextent)
            {
                isatbttom = true;
            }
            else isatbttom = false;
            return isatbttom;
        }

猜你喜欢

转载自blog.csdn.net/lai124793549/article/details/81287657