4

我在 WPF 4.5 中有一个画布,想用一个 UserControl 覆盖它,它主要包括

一个带有标签的网格和一个半透明的矩形作为背景:

<UserControl x:Class="Cwss.Tactical.Navigation.ObjectInfoView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:u="clr-namespace:Cwss.Utils.Converter"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300"
             d:DesignWidth="300">
  <UserControl.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Tactical/Styles/CommonStyle.xaml"></ResourceDictionary>
        <ResourceDictionary>
          <Style x:Key="AttrName"
                 TargetType="{x:Type Label}">
            <Setter Property="Foreground"
                    Value="White" />
            <Setter Property="FontSize"
                    Value="14"></Setter>
          </Style>
          <Style x:Key="AttrValue"
                 TargetType="{x:Type Label}">
            <Setter Property="Foreground"
                    Value="Yellow" />
            <Setter Property="FontSize"
                    Value="14"></Setter>
          </Style>
        </ResourceDictionary>
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </UserControl.Resources>


  <Grid Width="300"
        Height="200">

    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <Rectangle Panel.ZIndex="-1"
               Opacity=".5"
               Width="300"
               Height="200"
               Fill="Blue"
               Stroke="Blue"
               StrokeThickness="2"
               RadiusX="8"
               RadiusY="8">
    </Rectangle>

    <Label Style="{StaticResource AttrName}"
           Grid.Column="0"
           Content="Class"></Label>
    <Label Style="{StaticResource AttrValue}"
           Grid.Column="1"
           Name="ObjectKnowledge_Clas"
           Content="Hi"></Label>
    <Label Style="{StaticResource AttrName}"
           Grid.Column="0"
           Grid.Row="1"
           Content="Range"></Label>
    <Label Style="{StaticResource AttrValue}"
           Grid.Column="1"
           Grid.Row="1"
           Content="{Binding ObjectKnowledge.Range, Converter={u:RangetoStringConverter}}"></Label>
  </Grid>
</UserControl>

对我来说奇怪的是第一个标签被渲染在矩形上矩形网格

但所有其他标签都没有。感谢您让我知道我在这里做错了什么!

4

1 回答 1

10

那么你Rectangle被渲染为网格中的第一个元素,Row=0并且Column=0(假定为网格默认)

将您的矩形切换为:

<Rectangle Grid.RowSpan="4"
           Grid.ColumnSpan="2"
           Width="300"
           Height="200"
           Panel.ZIndex="-1"
           Fill="Blue"
           Opacity=".5"
           RadiusX="8"
           RadiusY="8"
           Stroke="Blue"
           StrokeThickness="2" />

现在你看到了其他标签。

您应该使用Snoop,它可能会像这样为您突出显示问题

使用 Snoop 的概述

于 2013-04-12T10:03:42.520 回答