【问题标题】:Make ProgressBar take available space使 ProgressBar 占用可用空间
【发布时间】:2011-08-21 05:08:43
【问题描述】:

这个问题与这个问题(接受的答案)直接相关:Change ListView CellTemplate based on state of item,它在接受的答案中包含所有相关的 XAML。

其中一种状态需要 ProgressBar。哪个行得通,除了我无法让它按照我想要的方式进行外观和操作,即占用所有可用的水平和垂直空间而不占用比所需更多的空间。

为了解决这个问题,我尝试遵循here 给出的建议,但我所做的任何事情似乎都没有单一效果。 XxxContentAlignment 选项将被忽略,无论我将它们应用于ContentControls、ListViewItems 还是我在此过程中想出的任何其他东西。绑定到命名元素也失败了,给了我一个

Cannot find source for binding with reference

错误指的是它无法找到其他答案所称的col1。我发现的所有其他建议都是这些的变体,要么涉及ActualWidth 或其ActualHeight 表亲,要么涉及RelativeSourceFindAncestor

在过去 2 小时试图解决这个相当微不足道的事情时,我想我真的可以利用最后的推动来向我指明正确的方向。 (并且可能会指出我一直在犯的明显错误......)

【问题讨论】:

  • 你的代码在哪里?我们怎么知道你做的是对还是错?
  • 见第一段。至于做对/做错:那里给出的建议我几乎执行了,我敢说它们不是火箭科学。我尝试了很多变体,我在问题中也提到了其中的基本部分,但除此之外你还想让我做什么?重现我记得尝试过的每一个品种? :)
  • 对不起。当我看到“我试图这样做但它不起作用”时,我希望看到代码随之而来。不幸的是,这种情况在这里发生得太频繁了,很难提供任何好的建议。
  • @Jeff Mercado:没问题。我遇到了没有经验的程序员在没有进行任何调查或经常调试自己的情况下提出问题的问题。它们使人们认为总结的问题或缺乏代码构成了缺乏努力和/或智慧 - 而实际上,这只是为了节省每个人的时间而切入正题。到目前为止,问题已经得到解答,但无论如何感谢您的评论,杰夫。我很感激。 :)

标签: c# wpf xaml listview binding


【解决方案1】:

这是一个高级别的,我通过改变 ItemStyle 让它伸展:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
</ListView.ItemContainerStyle>

我在一些代码上对其进行了测试,只是为了让您看到没有设置 HorizontalAlignmentHorizontalContentAlignment

<GridViewColumn Header="Status">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <ContentControl>
                <ContentControl.Style>
                    <Style TargetType="{x:Type ContentControl}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsActive}" Value="True">
                                <Setter Property="ContentTemplate">
                                    <Setter.Value>
                                        <DataTemplate>
                                            <StackPanel>
                                                <ProgressBar Height="20"
                                                             Value="{Binding Id}" Minimum="0" Maximum="10"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>

                            <!-- ... -->
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

【讨论】:

  • 啊,所以 ItemContainerStyle 是我错过的拼图!看完电影后我会试试看。 :) 但是,我想问一下 - 这是否不适用于我可能放入该列的 all 元素,而不仅仅是 ProgressBar?我认为我需要一组单独的 DataTrigger 用于 ItemContainerStyle?
  • 它不会影响我所看到的其他列。至少文本仍然左对齐(可能即使 TextBlock 现在拉伸了整个宽度)
  • 认为这是我先发制人的担忧。 :) 我会认为它已回答,因为它完全符合我的要求,谢谢! (转到下一个我可能会忽略的奇怪问题。)
猜你喜欢
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2012-07-04
  • 2014-10-26
  • 2014-01-05
  • 1970-01-01
  • 2015-01-28
  • 2021-01-23
相关资源
最近更新 更多