【问题标题】:Stretch ComboBox Content in Silverlight在 Silverlight 中拉伸 ComboBox 内容
【发布时间】:2023-04-04 10:27:01
【问题描述】:

这让我发疯了。我似乎无法在我的 ComboBox 中获取数据模板来拉伸下拉的宽度。什么给了?

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="30" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <ComboBox x:Name="SearchesComboBox" HorizontalContentAlignment="Stretch" Width="150">
        <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ComboBox.ItemContainerStyle>
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="Black" BorderThickness="1">
                    <TextBlock Text="{Binding}" Margin="2" />
                </Border>
            </DataTemplate>
        </ComboBox.ItemTemplate>
        <sys:String>Two</sys:String>
        <sys:String>Four</sys:String>
        <sys:String>Six</sys:String>
    </ComboBox>
</Grid>

【问题讨论】:

    标签: xaml combobox silverlight-2.0


    【解决方案1】:
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ComboBox.ItemContainerStyle>
    

    【讨论】:

      【解决方案2】:

      我刚刚在 WPF 中确认了以下工作,将 Horizo​​ntalContentAlignment 向上移动到 ComboBox:

      <ComboBox x:Name="SearchesComboBox" HorizontalContentAlignment="Stretch" Width="150">
        <ComboBox.ItemTemplate>
          <DataTemplate>
            <Border BorderBrush="Black" BorderThickness="1">
              <TextBlock Text="{Binding}" Margin="2" />
            </Border>
          </DataTemplate>
        </ComboBox.ItemTemplate>
        <sys:String>Two</sys:String>
        <sys:String>Four</sys:String>
        <sys:String>Six</sys:String>
      </ComboBox>
      

      如果这也解决了 Silverlight 中的问题,请告诉我。我看到的问题是下拉菜单中的项目大小正确,而下拉菜单中显示的内容没有拉伸。

      【讨论】:

      • 不,很遗憾,这在 Silverlight 中不起作用。下拉列表中的项目大小不正确,但标题中的内容大小正确。快把我逼疯了:)
      • 刚刚用 Silverlight 5 进行了测试,这种方法解决了我的问题。
      【解决方案3】:

      好的,经过大约一天的摆弄,我有一个解决方案。我讨厌它,但它有效。基本上,我反映到 Silverlight 的 System.Windows.dll 中,并删除了 ListBoxItem(ComboBoxItem 使用的)的默认模板。

      事实证明,在该模板中,有一个 ContentPresenter,其 Horizo​​ntalAlignment 硬编码为 Left。所以,我撕掉了模板,并为Horizo​​ntalAlignment添加了一个TemplateBinding,所以它可以使用ComboBoxItem的Horizo​​ntalAlignment。

      话虽如此,下面是工作代码。如果有人有更好的方法来做到这一点,请告诉我。我还没有检查这是否在 3.0 中修复。我希望是的。它应该从 ComboBox.Horizo​​ntalContentAlignment 一路绑定。

      <UserControl.Resources>
          <Style x:Key="FixedComboBoxItem" TargetType="ComboBoxItem">
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate TargetType="ComboBoxItem">
                          <Grid Background="{TemplateBinding Background}">
                              <vsm:VisualStateManager.VisualStateGroups>
                                  <vsm:VisualStateGroup x:Name="CommonStates">
                                      <vsm:VisualState x:Name="Normal" />
                                      <vsm:VisualState x:Name="MouseOver">
                                          <Storyboard>
                                              <DoubleAnimation Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Opacity" Duration="0" To=".35"/>
                                          </Storyboard>
                                      </vsm:VisualState>
                                      <vsm:VisualState x:Name="Disabled">
                                          <Storyboard>
                                              <DoubleAnimation Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity" Duration="0" To=".55" />
                                          </Storyboard>
                                      </vsm:VisualState>
                                  </vsm:VisualStateGroup>
                                  <vsm:VisualStateGroup x:Name="SelectionStates">
                                      <vsm:VisualState x:Name="Unselected" />
                                      <vsm:VisualState x:Name="Selected">
                                          <Storyboard>
                                              <DoubleAnimation Storyboard.TargetName="fillColor2" Storyboard.TargetProperty="Opacity" Duration="0" To=".75"/>
                                          </Storyboard>
                                      </vsm:VisualState>
                                  </vsm:VisualStateGroup>
                                  <vsm:VisualStateGroup x:Name="FocusStates">
                                      <vsm:VisualState x:Name="Focused">
                                          <Storyboard>
                                              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Visibility" Duration="0">
                                                  <DiscreteObjectKeyFrame KeyTime="0">
                                                      <DiscreteObjectKeyFrame.Value>
                                                          <Visibility>Visible</Visibility>
                                                      </DiscreteObjectKeyFrame.Value>
                                                  </DiscreteObjectKeyFrame>
                                              </ObjectAnimationUsingKeyFrames>
                                          </Storyboard>
                                      </vsm:VisualState>
                                      <vsm:VisualState x:Name="Unfocused"/>
                                  </vsm:VisualStateGroup>
                              </vsm:VisualStateManager.VisualStateGroups>
                              <Rectangle x:Name="fillColor" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False" RadiusX="1" RadiusY="1"/>
                              <Rectangle x:Name="fillColor2" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False" RadiusX="1" RadiusY="1"/>
                              <ContentPresenter
                                  x:Name="contentPresenter"
                                  Content="{TemplateBinding Content}"
                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                  HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                                  Margin="{TemplateBinding Padding}"/>
                              <Rectangle x:Name="FocusVisualElement" Stroke="#FF6DBDD1" StrokeThickness="1" Visibility="Collapsed" RadiusX="1" RadiusY="1" />
                          </Grid>
                      </ControlTemplate>
                  </Setter.Value>
              </Setter>
          </Style>
      </UserControl.Resources>
      
      <Grid x:Name="LayoutRoot" Background="White">
          <Grid.RowDefinitions>
              <RowDefinition Height="30" />
              <RowDefinition Height="*" />
          </Grid.RowDefinitions>
          <ComboBox x:Name="SearchesComboBox" Width="150" ItemContainerStyle="{StaticResource FixedComboBoxItem}"  HorizontalContentAlignment="Stretch">
              <ComboBox.ItemTemplate>
                  <DataTemplate>
                      <Border BorderBrush="Black" BorderThickness="1" >
                          <TextBlock Text="{Binding}" Margin="2" />
                      </Border>
                  </DataTemplate>
              </ComboBox.ItemTemplate>
              <sys:String>Two</sys:String>
              <sys:String>Four</sys:String>
              <sys:String>Six</sys:String>
          </ComboBox>
      </Grid>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 2013-12-13
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多