在 wpf 中,当我按下按钮时,它会关闭所有堆栈面板。按下按钮时我需要关闭特定的堆栈面板

问题描述 投票:0回答:2

正如我在标题中所说,我需要在按下关闭按钮时关闭按钮交互的堆栈面板项目。但我是 wpf 的新手,无法理解如何将堆栈面板或按钮与特定的堆栈面板项目绑定。你能帮帮我吗?

`<DataTemplate x:Key="fixTemplate">
    <Grid Background="Transparent" VerticalAlignment="Center" HorizontalAlignment="Center">
        <StackPanel  x:Name="fixPanel" MouseWheel="StackPanel_MouseWheel">
            <Border BorderThickness="1" CornerRadius="10" Opacity="1.0" Background="{dxi:ThemeResource {dxmt:MapBrushesThemeKey ResourceKey=OverlayBackground}}">
                <StackPanel Orientation="Vertical" Margin="8">
                    <Button x:Name="fixButton" Uid="0++" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" Content="X" Background="Red" Width="25" Height="25" HorizontalAlignment="Right" Click="fixButton_Click"/>
                    <TextBlock x:Name="fixText" Text="{Binding ToolTipText}" Foreground="{dxi:ThemeResource {dxmt:MapBrushesThemeKey ResourceKey=OverlayElementForeground}}"  TextWrapping="Wrap"/>
                </StackPanel>
            </Border>
            <Path Stretch="Fill" 
              Data="m 66.709675,141.93548 29.096774,-33 27.677421,33.35484 -18.80645,-0.35484 0.70968,43.29032 H 87.64516 l -0.709676,-43.29032 z"
              HorizontalAlignment="Center"
              Height="15"
              Width="20"
              UseLayoutRounding="False"
              VerticalAlignment="Center"
              Stroke="#BF000000" 
              StrokeThickness="0.4"
              Margin="-13 0 0 0" >
                <Path.Effect>
                    <DropShadowEffect ShadowDepth="2" BlurRadius="7" Opacity="0.5"/>
                </Path.Effect>
                <Path.Fill>
                    <RadialGradientBrush>
                        <GradientStop Color="Black" Offset="1." />
                    </RadialGradientBrush>
                </Path.Fill>
            </Path>
        </StackPanel>                
    </Grid>
</DataTemplate>`

如您所见,我有一个按钮和动态创建的堆栈面板。如何删除单击按钮的堆栈面板?

我试图删除位于其删除按钮下方的堆栈面板,但我的代码中的每个堆栈面板都被删除了。我不知道如何指定在按下堆栈面板的关闭按钮时删除哪个堆栈面板

c# wpf xaml
2个回答
0
投票

我试过的代码是这个

public IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);

                if (child != null && child is T)
                    yield return (T)child;

                foreach (T childOfChild in FindVisualChildren<T>(child))
                    yield return childOfChild;
            }
        }
    }

    private void fixButton_Click(object sender, RoutedEventArgs e)
    {
        string tooltip = "";
        List<string> ttlist = new List<string>();
        foreach (var textblock in FindVisualChildren<TextBlock>(this))
        {
            if (textblock.Name == "fixText")
            {
                tooltip = textblock.Text;
                ttlist.Add(tooltip);
            }
            break;
        }

        for (int i = 0; i < RealTimeMapDataGeneratorModel.sb.Count; i++)
        {
            System.Console.WriteLine(tooltip);
            System.Console.WriteLine(RealTimeMapDataGeneratorModel.sb[i].ToolTipText);
            if (ttlist[i] == RealTimeMapDataGeneratorModel.sb[i].ToolTipText)
            {
                //SubmarineVectorLayer.Visibility = Visibility.Hidden;
                RealTimeMapDataGeneratorModel.Submarine.RemoveAt(i);
                RealTimeMapDataGeneratorModel.sb.RemoveAt(i);
            }

        }
    }

0
投票

我通过在堆栈面板中添加复选框解决了这个问题

<Border BorderThickness="1" CornerRadius="10" Opacity="1.0" Background="{dxi:ThemeResource {dxmt:MapBrushesThemeKey ResourceKey=OverlayBackground}}">
   <StackPanel Orientation="Vertical" Margin="8">
       <CheckBox x:Name="MyCheckBox" IsChecked="True" HorizontalAlignment="Left"/>
       <TextBlock Text="{Binding ToolTipText}" Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={dxmvvm:BooleanToVisibilityConverter}}" Foreground="{dxi:ThemeResource {dxmt:MapBrushesThemeKey ResourceKey=OverlayElementForeground}}"  TextWrapping="Wrap"/>
   </StackPanel>
</Border>

模型视图中的这段代码

public class BoolToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var isChecked = (bool)value;
        return isChecked ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.