【问题标题】:How do I style the selected/current/active ComboBoxItem in SIlverlight?如何在 SIlverlight 中设置选定/当前/活动 ComboBoxItem 的样式?
【发布时间】:2014-08-20 19:30:16
【问题描述】:

由于某种原因,ComboBoxes 中的选定项目根本没有样式。 这是我的用户控制资源

 <UserControl.Resources>
        <Style x:Key="cmbox" TargetType="ComboBox">
            <Setter Property="Background" Value="#3A3D9E"/>
            <Setter Property="Foreground" Value="DarkBlue"/>

        </Style>
        <Style x:Key="cmboxItem" TargetType="ComboBoxItem">
            <Setter Property="Background" Value="#3A3D9E"/>
            <Setter Property="BorderBrush" Value="AliceBlue"/>
            <Setter Property="Foreground" Value="DarkBlue"/>
        </Style>

还有代码……

 <sdk:DataGridTextColumn Binding="{Binding Benamning}" Header="Benämning"/>
                            <sdk:DataGridTextColumn Binding="{Binding Antal}" Header="Antal"/>
                            <sdk:DataGridTemplateColumn Header="Item">
                                <sdk:DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel>
                                            <StackPanel.Resources>
                                                <Style BasedOn="{StaticResource cmbox}" TargetType="ComboBox"/>
                                                <Style BasedOn="{StaticResource cmboxItem}" TargetType="ComboBoxItem"/>
                                            </StackPanel.Resources>
                                            <ComboBox SelectedIndex="0">
                                                <ComboBoxItem >Item1</ComboBoxItem>
                                                <ComboBoxItem >Item2</ComboBoxItem>
                                                <ComboBoxItem >Item3</ComboBoxItem>
                                            </ComboBox>
                                        </StackPanel>
                                    </DataTemplate>
                                </sdk:DataGridTemplateColumn.CellTemplate>
                            </sdk:DataGridTemplateColumn>
                                <sdk:DataGridTextColumn Binding="{Binding Dis_saldo}" Header="Disponibelt Saldo"/>
                </sdk:DataGrid.Columns>

打印屏幕:

**编辑:格林威治标准时间 2014 年 8 月 20 日 12:30。在这里查看我的更改:**

  <sdk:DataGridTemplateColumn Header="Item">
                                <sdk:DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>

                                        <StackPanel>
                                            <StackPanel.Resources>
                                                <Style BasedOn="{StaticResource cmbox}" TargetType="ComboBox"/>
                                                <Style BasedOn="{StaticResource cmboxItem}" TargetType="ComboBoxItem"/>
                                            </StackPanel.Resources>
                                            <ComboBox  x:Name="TheCombo">
                                                <ComboBoxItem >Item1</ComboBoxItem>
                                                <ComboBoxItem >Item2</ComboBoxItem>
                                                <ComboBoxItem >Item3</ComboBoxItem>
                                            </ComboBox>
                                        </StackPanel>
                                    </DataTemplate>
                                </sdk:DataGridTemplateColumn.CellTemplate>
                                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="{Binding SelectionBoxItem, ElementName=TheCombo}">
                                        </TextBlock>
                                    </DataTemplate>
                                </sdk:DataGridTemplateColumn.CellEditingTemplate>
                            </sdk:DataGridTemplateColumn>

不工作:(

【问题讨论】:

  • 到目前为止,您可能希望在您的单元格模板旁边合并一个 CellEditingTemplate,以便控件不会劫持您在 DataGrid 中的焦点/选项卡顺序。至于另一部分,您希望您的 Selected Item 看起来像什么?这一切都在该控件的样式模板中。
  • 就像单元格模板中的项目

标签: silverlight combobox datagridcomboboxcolumn


【解决方案1】:

好的,所以您的问题是您只使用 CellTemplate,您需要合并 CellEditingTemplate 以便您的 ComboBox 仅在该单元格被编辑时出现,YourComboBox 的行为似乎符合预期(尽管不知道为什么您会想要在如此黑暗的背景上使用如此黑暗的文本)然后当它失去焦点时,您会看到它看起来像 DataGrid 上的其他所有内容。所以(另见 cmets)类似的东西;

<sdk:DataGridTextColumn Binding="{Binding Benamning}" Header="Benämning"/>
  <sdk:DataGridTextColumn Binding="{Binding Antal}" Header="Antal"/>
  <sdk:DataGridTemplateColumn Header="Item">
    <sdk:DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
      <!-- PS, ya don't need this StackPanel but I'll leave it in here. -->
        <StackPanel>
          <StackPanel.Resources>
            <Style BasedOn="{StaticResource cmbox}" TargetType="ComboBox"/>
            <Style BasedOn="{StaticResource cmboxItem}" TargetType="ComboBoxItem"/>
          </StackPanel.Resources>
          <ComboBox SelectedIndex="0" x:Name="TheCombo">
            <ComboBoxItem >Item1</ComboBoxItem>
            <ComboBoxItem >Item2</ComboBoxItem>
            <ComboBoxItem >Item3</ComboBoxItem>
          </ComboBox>
        </StackPanel>
      </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
    <sdk:DataGridTemplateColumn.CellEditingTemplate>
      <DataTemplate>
        <!-- Not sure if it's SelectedValue, or SelectedItem, or Text, or whatever
             you'll need to bind to to display the selected item from your ComboBox
             you have in your CellTemplate but you get the jist -->
        <TextBlock Text="{Binding SelectedValue, ElementName=TheCombo}"/>
      </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>    
  </sdk:DataGridTemplateColumn>
  <sdk:DataGridTextColumn Binding="{Binding Dis_saldo}" Header="Disponibelt Saldo"/>
</sdk:DataGrid.Columns>

希望这会有所帮助,干杯。

【讨论】:

  • 谢谢我明白你的意思 =) 。不幸的是它似乎不起作用,已经尝试过 SelecteValue、SelectedItem 和 Text =/
  • 您的财产是公开的还是私有的?
  • @DeveloperDahak 哦,还有一秒钟要测试,我认为实际上是 SelectionBoxItem 你想将 TextBlock 绑定到。
  • 不确定该物业?我又试了一次,但还是不行。看看我的“编辑”
  • 哦,这其实是有道理的,我当时没有考虑,我只是快速ToolTipService.ToolTip="{Binding SelectionBoxItem, RelativeSource={RelativeSource Self}" 快速查看我是否无法抢占该物业,但如果它坐在一个 CellTemplate 它是不可见的,那里没有可以抓取的,你可以尝试直接像 this one
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2013-04-04
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多