如何使用FallbackValue设置UserControl的宽度

时间:2019-06-03 18:56:17

标签: c# wpf xaml binding user-controls

我已经创建了一个非常基本的UserControl

<StackPanel Margin="0,0,10,0" Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth}" Orientation="Vertical">
    <TextBlock Margin="5" HorizontalAlignment="Center" Text="{Binding HeaderText, ElementName=thisUserControl}"/>
    <TextBlock Margin="5" HorizontalAlignment="Center" Text="{Binding ValueText, ElementName=thisUserControl}"/>
</StackPanel>

我希望它的默认宽度为“ 90”,但是如果给出另一个值,它将使用它。

如果我按照上面给出的代码进行操作,则没有FallbackValue,因此它使用给定的Width,或者,如果没有给出,则使用最小的宽度来显示其内容。像这样使用它:

  <StackPanel Orientation="Horizontal">
        <local:UserStackPanelList Height="60" HeaderText="Name" ValueText="{Binding Path=ShareName}" Width="200"/>

如果我将以下内容用于UserControl

<StackPanel Margin="0,0,10,0" Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth, FallbackValue=90}" Orientation="Vertical">

该项目本身使用给定的宽度(200),但TextBlocks的宽度保持为90。

我试图给UserControl一个 Name =“ thisUserControl” ,所以我可以将它用作 ElementName ,但这也可以。该项目的宽度保持为200,但TextBlocks仅占用90(StackPanel的FallbackValue),即使更长的文本可以完整显示。

我如何才能达到预期的效果?

编辑: 我有这个: enter image description here

哪个是带有ItemTemplate的ListView

<ListView ItemsSource="{Binding Path=Shares}" Name="LV">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid Background="{Binding Path=Backgropund}" Margin="5,2.5,5,2.5" >
                            <StackPanel Orientation="Horizontal">
                                <local:UserStackPanelList Height="60" HeaderText="Name" ValueText="{Binding Path=ShareName}" Width="200"/>
                                <local:UserStackPanelList Height="60" HeaderText="Amount" ValueText="{Binding Path=Amount}"/>      

(对我来说)哪个看起来不错。但是,如果ShareName很长,它将被削减为Width(90)的FallbackValue。我调查了ListView.View-> GridView,但看起来并不那么好。我也无法绑定到BackgroundColor。但是拥有标题而不是为每个项目定义标题都非常不错。因此,如果您可以提出更好的版式,我将很高兴听到。一些代码也将非常不错。我无法理解https://docs.microsoft.com/de-de/dotnet/framework/wpf/controls/listview-overview“设计实现GridView的ListView的样式”一章的内容……

干杯汤姆斯

0 个答案:

没有答案