1

我正在尝试将 WPF 颜色选择器的控制模板设置为矩形。我希望只显示一个矩形来代替 ColorPicker ComboBox。但是当我在 ControlTemplate 中放置任何控件时,我会收到“对象引用未设置为对象实例”的错误。

这是我的 wpf 代码:

<wpfx:ColorPicker Name="ColorPicker1" Height="30" DisplayColorAndName="False"
                  Margin="29,72,366,209"
                  SelectedColorChanged="ColorPicker1_SelectedColorChanged">
    <wpfx:ColorPicker.Template>
        <ControlTemplate>
            <Rectangle ></Rectangle>
        </ControlTemplate>
    </wpfx:ColorPicker.Template>
</wpfx:ColorPicker>

关于我做错了什么的任何建议?

4

1 回答 1

5

最可能的原因是 ColorPicker 控件在其模板中需要一些元素,通常这些元素具有以“PART_...”开头的特殊名称。我认为为了获得有关遗漏哪个元素的更多信息,您必须查看默认颜色选择器模板并找出其中的哪些元素以及它们具有哪些名称。

可能的修复方案:找到 ColorPicker 控件所必需的控件的名称,并将此名称赋予您的矩形。

这是 ColorPicker 默认模板:

        <ControlTemplate TargetType="{x:Type local:ColorPicker}">
           <Grid>
              <ToggleButton x:Name="PART_ColorPickerToggleButton"
                            IsTabStop="True"
                            MinHeight="22" 
                            Background="{TemplateBinding Background}" 
                            BorderBrush="{TemplateBinding BorderBrush}" 
                            BorderThickness="{TemplateBinding BorderThickness}" 
                            VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                            Padding="{TemplateBinding Padding}"
                            IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                            IsHitTestVisible="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource InverseBoolConverter}}"
                            Style="{TemplateBinding ButtonStyle}">
                 <Grid Margin="2">
                    <Border x:Name="ColorOnly" Style="{StaticResource ColorDisplayStyle}" />

                    <Border x:Name="ColorAndName" Background="White" Visibility="Hidden">
                       <StackPanel Orientation="Horizontal">
                          <Border HorizontalAlignment="Left" Width="20" Margin="2,1,4,1" Style="{StaticResource ColorDisplayStyle}" BorderThickness="1" BorderBrush="#FFC9CACA" />
                          <TextBlock Text="{Binding SelectedColorText, RelativeSource={RelativeSource TemplatedParent}}" VerticalAlignment="Center" />
                       </StackPanel>
                    </Border>
                 </Grid>
              </ToggleButton>

              <Popup x:Name="PART_ColorPickerPalettePopup" VerticalAlignment="Bottom" IsOpen="{Binding ElementName=PART_ColorPickerToggleButton, Path=IsChecked}" StaysOpen="False" AllowsTransparency="True" Focusable="False" HorizontalOffset="1" VerticalOffset="1" PopupAnimation="Slide">
                 <Border BorderThickness="1" Background="{StaticResource PopupBackgroundBrush}" BorderBrush="{StaticResource ColorPickerDarkBorderBrush}" Padding="3">
                    <Grid>
                       <Grid.RowDefinitions>
                          <RowDefinition Height="Auto" />
                          <RowDefinition />
                          <RowDefinition Height="Auto" />
                       </Grid.RowDefinitions>

                       <Grid x:Name="_gridStandardColorsHost" Margin="4">
                          <Grid.RowDefinitions>
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
                          </Grid.RowDefinitions>

                          <!-- Available Colors -->
                          <Grid Grid.Row="1" Visibility="{TemplateBinding ShowAvailableColors, Converter={StaticResource BooleanToVisibilityConverter}}">
                             <Grid>
                                <Grid.RowDefinitions>
                                   <RowDefinition Height="Auto" />
                                   <RowDefinition />
                                </Grid.RowDefinitions>
                                <TextBlock Text="{TemplateBinding AvailableColorsHeader}" Background="AliceBlue" Padding="2" Margin="0,0,0,1" />
                                <ListBox x:Name="PART_AvailableColors"
                                         Grid.Row="1"
                                         ItemsSource="{Binding AvailableColors, RelativeSource={RelativeSource TemplatedParent}}"
                                         Style="{StaticResource ColorListStyle}" />
                             </Grid>
                          </Grid>

                          <!-- Standard Colors-->
                          <Grid Grid.Row="2" Visibility="{TemplateBinding ShowStandardColors, Converter={StaticResource BooleanToVisibilityConverter}}">
                             <Grid>
                                <Grid.RowDefinitions>
                                   <RowDefinition Height="Auto" />
                                   <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <TextBlock Text="{TemplateBinding StandardColorsHeader}" Background="AliceBlue" Padding="2" Margin="0,1,0,1" />
                                <ListBox x:Name="PART_StandardColors"
                                         Grid.Row="1"
                                         ItemsSource="{Binding StandardColors, RelativeSource={RelativeSource TemplatedParent}}"                                                      
                                         Style="{StaticResource ColorListStyle}" />
                             </Grid>
                          </Grid>

                          <!-- Recent Colors-->
                          <Grid Grid.Row="3" Margin="0,1,0,1" Visibility="{TemplateBinding ShowRecentColors, Converter={StaticResource BooleanToVisibilityConverter}}">
                             <Grid>
                                <Grid.RowDefinitions>
                                   <RowDefinition Height="Auto" />
                                   <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <TextBlock Text="{TemplateBinding RecentColorsHeader}" Background="AliceBlue" Padding="2" Margin="0,1,0,1" />
                                <ListBox x:Name="PART_RecentColors"
                                         Grid.Row="1"
                                         ItemsSource="{Binding RecentColors, RelativeSource={RelativeSource TemplatedParent}}"
                                         Style="{StaticResource ColorListStyle}" />
                             </Grid>
                          </Grid>
                       </Grid>

                       <!-- ColorCanvas -->
                       <Grid x:Name="_colorCanvasHost" Visibility="Collapsed">
                          <local:ColorCanvas x:Name="PART_ColorCanvas"
                                             Background="Transparent"
                                             BorderThickness="0"
                                             SelectedColor="{Binding SelectedColor, RelativeSource={RelativeSource TemplatedParent}}" />
                       </Grid>

                       <Separator Grid.Row="1" HorizontalAlignment="Stretch" Margin="5,0,5,0" />

                       <!-- More Colors Button -->
                       <ToggleButton x:Name="_colorMode" Grid.Row="2" Content="Advanced" Margin="5" Visibility="{TemplateBinding ShowAdvancedButton, Converter={StaticResource BooleanToVisibilityConverter}}" />
                    </Grid>
                 </Border>
              </Popup>
           </Grid>
           <ControlTemplate.Triggers>
              <Trigger Property="DisplayColorAndName" Value="True">
                 <Setter TargetName="ColorOnly" Property="Visibility" Value="Collapsed" />
                 <Setter TargetName="ColorAndName" Property="Visibility" Value="Visible" />
              </Trigger>
              <Trigger SourceName="_colorMode" Property="IsChecked" Value="True">
                 <Setter TargetName="_colorMode" Property="Content" Value="Standard" />
                 <Setter TargetName="_colorCanvasHost" Property="Visibility" Value="Visible" />
                 <Setter TargetName="_gridStandardColorsHost" Property="Visibility" Value="Collapsed" />
              </Trigger>
           </ControlTemplate.Triggers>
        </ControlTemplate>
于 2012-08-10T12:21:08.537 回答