Как установить ширину UserControl с FallbackValue - PullRequest
0 голосов
/ 03 июня 2019

Я создал очень простой 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 отсутствует, поэтому он использует заданную ширину или, если не указано иное, минимально возможное отображение содержимого. Используя это как:

  <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), но текстовые блоки остаются на ширине 90.

Я попытался дать UserControl Name = "thisUserControl" , чтобы я мог использовать его как ElementName , но эта работа также не работает. Элемент имеет ширину 200, но TextBlocks занимает только 90 (FallbackValue of StackPanel), даже если текст длиннее для отображения в полном объеме.

Как мне добиться, чтобы он работал как нужно?

Edit: У меня есть это: enter image description here

Что такое ListView с ItemTemplate

<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 длинное, оно обрезается до FallbackValue Width (90). Я посмотрел в ListView.View -> GridView, но это выглядит не так хорошо. Я не смог заставить работать привязку к BackgroundColor. Но иметь заголовок вместо определения его для каждого элемента довольно приятно. Так что, если бы вы могли предложить лучший макет, я был бы рад услышать. Некоторый код тоже был бы неплох. Я не мог получить навык https://docs.microsoft.com/de-de/dotnet/framework/wpf/controls/listview-overview «Стилизация ListView, который реализует GridView» глава ...

Приветствия Томс

...