如何/应该在xaml中的哪个位置放置一个部分,以使trayicon不会对每个标签都重复?

这里是xaml:

<Window x:Class="ExternalServicesMonitor.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:tb="http://www.hardcodet.net/taskbar"
    xmlns:local="clr-namespace:ExternalServicesMonitor"
    mc:Ignorable="d"
    Title="MainWindow" Height="50" Width="50" SizeToContent="WidthAndHeight" ResizeMode="NoResize" Topmost="True" AllowsTransparency="True" WindowStyle="None" Background="Transparent">
<ItemsControl ItemsSource="{Binding Path=Parents}" Grid.issharedsizescope="True">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type local:Parent}">
            <Grid>

                <Grid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Minimize" Click="Button_Click_Minimize">
                            <MenuItem.Icon>
                                <Image Source="Resources/Windows-Close-icon.png"/>
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Header="Exit" Click="Button_Click_Exit">
                            <MenuItem.Icon>
                                <Image Source="Resources/Windows-Close-icon.png"/>
                            </MenuItem.Icon>
                        </MenuItem>
                    </ContextMenu>

                </Grid.ContextMenu>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" sharedsizegroup="ParentColumn" />
                    <ColumnDefinition  />
                </Grid.ColumnDefinitions>

                <!-- Parent label -->
                <Label Content="{Binding Path=Name}"
                   x:Name="Label" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="Gray" BorderThickness="1" FontFamily="Verdana" Foreground="{Binding Path=Foreground}" Background="{Binding Path=Background}" ToolTip="{Binding Path=Last}"/>

                <!-- Errors -->
                <ItemsControl ItemsSource="{Binding Path=Errors}"
                          Grid.Column="1">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate DataType="{x:Type local:Child}">
                            <Label Content="{Binding Path=Name}"
                                    HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="Gray" BorderThickness="1" FontFamily="Verdana" Foreground="{Binding Path=Foreground}" Background="{Binding Path=Background}"/>
                        </DataTemplate>

                    </ItemsControl.ItemTemplate>
                    <ItemsControl.ItemsPanel>
                        <itemspaneltemplate>
                            <StackPanel Orientation="Horizontal" />
                        </itemspaneltemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>

                <tb:TaskbarIcon
                    IconSource="/Resources/icon.ico"
                    ToolTipText="hello world" />

            </Grid>

        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

当我添加该部分时:

<tb:TaskbarIcon
                IconSource="/Resources/icon.ico"
                ToolTipText="hello world" />

它创建10个任务栏图标(由于从数据绑定创建了10个标签)

我曾尝试将其添加到grid部分之外,但不喜欢这样,或者我只能将其作为xml之外的代码添加

这是任务栏图标项目link的网站

有什么想法吗?

谢谢

lvshanglin 回答:如何/应该在xaml中的哪个位置放置一个部分,以使trayicon不会对每个标签都重复?

您可以将ItemsControlTaskbarIcon放在同一Grid中。以下内容应使图标显示在ItemsControl下:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ItemsControl ItemsSource="{Binding Path=Parents}" Grid.IsSharedSizeScope="True">
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type local:Parent}">
                <Grid>

                    <Grid.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Minimize" Click="Button_Click_Minimize">
                                <MenuItem.Icon>
                                    <Image Source="Resources/Windows-Close-icon.png"/>
                                </MenuItem.Icon>
                            </MenuItem>
                            <MenuItem Header="Exit" Click="Button_Click_Exit">
                                <MenuItem.Icon>
                                    <Image Source="Resources/Windows-Close-icon.png"/>
                                </MenuItem.Icon>
                            </MenuItem>
                        </ContextMenu>

                    </Grid.ContextMenu>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="ParentColumn" />
                        <ColumnDefinition  />
                    </Grid.ColumnDefinitions>

                    <!-- Parent label -->
                    <Label Content="{Binding Path=Name}"
                   x:Name="Label" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="Gray" BorderThickness="1" FontFamily="Verdana" Foreground="{Binding Path=Foreground}" Background="{Binding Path=Background}" ToolTip="{Binding Path=Last}"/>

                    <!-- Errors -->
                    <ItemsControl ItemsSource="{Binding Path=Errors}"
                          Grid.Column="1">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type local:Child}">
                                <Label Content="{Binding Path=Name}"
                                    HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderBrush="Gray" BorderThickness="1" FontFamily="Verdana" Foreground="{Binding Path=Foreground}" Background="{Binding Path=Background}"/>
                            </DataTemplate>

                        </ItemsControl.ItemTemplate>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <tb:TaskbarIcon Grid.Row="1"
                    IconSource="/Resources/icon.ico"
                    ToolTipText="hello world" />
</Grid>

如果要放在顶部,可以删除<Grid.RowDefinitions>元素并使用其TaskbarIcon属性放置Margin

本文链接:https://www.f2er.com/3145036.html

大家都在问