设置WPF ColorPicker的控件模板

Irf*_*fan 1 wpf exception color-picker object-reference controltemplate

我正在尝试将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>
Run Code Online (Sandbox Code Playgroud)

对我做错了什么的建议?

Cap*_* O. 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>
Run Code Online (Sandbox Code Playgroud)