Silverlight - TabControl refusing to fill remaining space - c#

At my wits end with trying to get a TabControl and TabItems to fill a NavigationPage/Frame.
I have a MasterPage, with a Frame, that will get swapped out for different Pages, which are comprised of UserControls.
The problem I am having is that the TabControl is cutting off the UserControl and not auto sizing properly. Below is an image and the source for the Pages and Controls.
[Field below Location is cutoff] http://imgur.com/FoDGJyN
MainPage.xaml
<UserControl x:Class="TournamentControls.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-
namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:uriMapper="clr-
namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="800">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Name="topNavi" Orientation="Horizontal" Grid.Row="0">
<TextBlock Name="TournamentsNavi" Text="Tournaments"
MouseLeftButtonUp="TournamentsNavi_MouseLeftButtonUp" Margin="0,0,20,0"/>
<TextBlock Name="DivisonsNavi" Text="Division"
MouseLeftButtonUp="DivisonsNavi_MouseLeftButtonUp" Margin="0,0,20,0"/>
<TextBlock Name="EventsNavi" Text="Events"
MouseLeftButtonUp="EventsNavi_MouseLeftButtonUp" Margin="0,0,20,0"/>
<TextBlock Name="CompetitorsNavi" Text="Competitors"
MouseLeftButtonUp="CompetitorsNavi_MouseLeftButtonUp" Margin="0,0,20,0"/>
<TextBlock Name="MastersNavi" Text="Masters"
MouseLeftButtonUp="MastersNavi_MouseLeftButtonUp" Margin="0,0,20,0"/>
<TextBlock Name="RefereesNavi" Text="Referees"
MouseLeftButtonUp="RefereesNavi_MouseLeftButtonUp"/>
</StackPanel>
<navigation:Frame x:Name="PageContent" Background="#007A0909" Grid.Row="1"
Navigated="PageContent_Navigated" Navigating="PageContent_Navigating">
<navigation:Frame.UriMapper>
<uriMapper:UriMapper>
<uriMapper:UriMapping Uri="/{pageName}"
MappedUri="/Pages/{pageName}.xaml"/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>
</navigation:Frame>
</Grid>
</UserControl>
TournamentsPage.xaml
<navigation:Page x:Class="TournamentControls.Tournaments"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:navigation="clr-
namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
xmlns:toolkit2="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:cc="clr-namespace:TournamentControls.Controls.Tournaments"
d:DesignWidth="640" d:DesignHeight="480" Title="Tournaments Page">
<Grid x:Name="LayoutRoot" Background="White">
<toolkit2:TabControl>
<toolkit2:TabItem x:Name="CreateTab" Header="Create Tournament">
<cc:TournamentsCreateControl/>
</toolkit2:TabItem>
<toolkit2:TabItem x:Name="ModifyTab" Header="Modify Tournament">
<cc:TournamentsModifyControl/>
</toolkit2:TabItem>
</toolkit2:TabControl>
</Grid>
</navigation:Page>
TournamentsCreateControl.xaml
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="0,4,0,4" Style="{StaticResource TaskGridMenuBarBorderStyle}" Grid.ColumnSpan="2" >
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Border Style="{StaticResource TaskGridMenuBorderStyle}" Margin="0,0,25,0" Padding="10,0" Grid.ColumnSpan="1" HorizontalAlignment="Left">
<StackPanel x:Name="pnlTaskGridToolbar" Orientation="Horizontal">
<!-- save -->
<Button x:Name="SaveButton" Style="{StaticResource ImageButtonStyle}"
Click="SaveButton_Click" ToolTipService.ToolTip="Save BMC Structure" Margin="0,0,5,0" >
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="../../Resources/Icons/Save.png" Margin="0,0,2,0" />
<TextBlock VerticalAlignment="Center">Save Tournament</TextBlock>
</StackPanel>
</Button.Content>
</Button>
</StackPanel>
</Border>
</Grid>
</Border>
<Grid x:Name="ContentGrid" Grid.Row="1" VerticalAlignment="Stretch">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" x:Name="LabelsSP" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,5,0,10">
<TextBlock x:Name="TournamentLbl" Text="Tournament Name:" FontWeight="Bold" Margin="0,0,10,0" VerticalAlignment="Center"/>
<TextBox x:Name="TournamentTbx" Width="100" MaxLength="255"/>
</StackPanel>
<StackPanel Grid.Row="1" x:Name="LocationSP" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,0,0,10">
<TextBlock x:Name="LocationLbl" Text="Location:" FontWeight="Bold" Margin="60,0,12,0" VerticalAlignment="Center"/>
<TextBox x:Name="LocationTbx" Width="100" MaxLength="255"/>
</StackPanel>
<StackPanel Grid.Row="2" x:Name="DateTimeSP" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,0,0,10">
<TextBlock x:Name="DateTimeLbl" Text="Tournament Time:" FontWeight="Bold" Margin="3,0,12,0" VerticalAlignment="Center"/>
<toolkit2:DatePicker x:Name="DateTimePicker"/>
</StackPanel>
<StackPanel x:Name="ButtonSP" Orientation="Horizontal"/>
</Grid>
</Grid>
</Grid>
TournamentsModifyControl.xaml
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="0,4,0,4" Style="{StaticResource TaskGridMenuBarBorderStyle}" Grid.ColumnSpan="2" >
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition/>
</Grid.RowDefinitions>
<Border Style="{StaticResource TaskGridMenuBorderStyle}" Margin="0,0,25,0" Padding="10,0" Grid.ColumnSpan="1" HorizontalAlignment="Left">
<StackPanel x:Name="pnlTaskGridToolbar" Orientation="Horizontal">
<!-- save -->
<Button x:Name="SaveButton" Style="{StaticResource ImageButtonStyle}"
Click="SaveButton_Click" ToolTipService.ToolTip="Save Tournament Changes" Margin="0,0,5,0" >
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="../../Resources/Icons/Save.png" Margin="0,0,2,0" />
<TextBlock VerticalAlignment="Center">Save Tournament Changes</TextBlock>
</StackPanel>
</Button.Content>
</Button>
</StackPanel>
</Border>
</Grid>
</Border>
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" x:Name="TournamentsSelectSP" Orientation="Horizontal" Margin="0,5,0,10">
<TextBlock x:Name="CurrentTournamentsLbl" Text="Current Tournaments:" FontWeight="Bold" VerticalAlignment="Center" Margin="0,0,10,0"/>
<ComboBox x:Name="CurrentTournamentsCbx"/>
</StackPanel>
<StackPanel Grid.Row="1" x:Name="LabelsSP" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock x:Name="TournamentLbl" Text="Tournament Name:" FontWeight="Bold" Margin="0,0,10,0" VerticalAlignment="Center"/>
<TextBox x:Name="TournamentTbx" Width="100" MaxLength="255"/>
</StackPanel>
<StackPanel Grid.Row="2" x:Name="LocationSP" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock x:Name="LocationLbl" Text="Location:" FontWeight="Bold" Margin="60,0,12,0" VerticalAlignment="Center"/>
<TextBox x:Name="LocationTbx" Width="100" MaxLength="255"/>
</StackPanel>
<StackPanel Grid.Row="3" x:Name="DateTimeSP" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock x:Name="DateTimeLbl" Text="Tournament Time:" FontWeight="Bold" Margin="3,0,12,0" VerticalAlignment="Center"/>
<toolkit2:DatePicker x:Name="DateTimePicker"/>
</StackPanel>
</Grid>
</Grid>

Related

How to do a list of square in GRID XAML?

I am trying to create a grid in XAML by the following:
GRID Type
I tried something like this but I have no ideea how to add the red squares.
Do I have to make a grid in grid?
Right now, I have this code
<Window x:Class="MonitorComenzi.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MonitorComenzi"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" FontSize="30" TextAlignment="Center" FontWeight="Bold" Foreground="Black">Comenzi plasate</TextBlock>
<TextBlock Grid.Row="0" Grid.Column="1" FontSize="30" TextAlignment="Center" FontWeight="Bold" Foreground="Green">Comenzi preparate</TextBlock>
</Grid>
</Window>
You can make nested Grids, its absolutly fine, but a single StackPanel do the trick as well. Something like this:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" FontSize="30" TextAlignment="Center" FontWeight="Bold" Foreground="Black">Comenzi plasate</TextBlock>
<TextBlock Grid.Row="0" Grid.Column="1" FontSize="30" TextAlignment="Center" FontWeight="Bold" Foreground="Green">Comenzi preparate</TextBlock>
<StackPanel Orientation="Horizontal"
Margin="10"
Grid.Row="1"
Grid.Column="0">
<Rectangle Fill="Red" Width="30" Height="30" Margin="5 0"/>
<Rectangle Fill="Red" Width="30" Height="30" Margin="5 0"/>
<Rectangle Fill="Red" Width="30" Height="30" Margin="5 0"/>
<Rectangle Fill="Red" Width="30" Height="30" Margin="5 0"/>
</StackPanel>
</Grid>

Set height of element to height of neighbouring element

I have a GUI in WPF application which looks like that:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical">
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="50" Margin="2"></Border>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="90" Margin="2"></Border>
</StackPanel>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2">
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Content="Some"/>
<Button Content="Buttons"/>
</StackPanel>
<Label Content="Some Label"/>
<ListView ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListViewItem>Item1</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<!-- and so on...-->
<ListViewItem>Item8</ListViewItem>
</ListView>
</StackPanel>
</Border>
</StackPanel>
</Grid>
The two borders to the left are just placeholders for the GUI elements in the real application. The GUI element looks like this:
I want the right StackPanel to be just as high as the left StackPanel, like in the following screenshot:
For the screenshot, I was manually setting the MaxHeight property of the ListView to right value, but of course that is no satisfying solution and it will become impossible if I don't know at compile time which and how many elements populate the left StackPanel.
Is there any solution to this Problem? I was trying a binding:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical" Name="Left">
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="50" Margin="2"></Border>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="90" Margin="2"></Border>
</StackPanel>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2" Height="{Binding ElementName=Left, Path=Height}">
<!-- as above -->
</Border>
</StackPanel>
</Grid>
But I did not succeed with it, also when I bind to the ActualHeight of the left StackPanel. Any suggestions?
Stack panels expand to fit their contents. Instead you need to put the ListView in a container of a fixed size (I've used a Grid with a row of height *), that takes its size from the boxes in the first column.
I used a binding to ActualHeight, that was very similar to yours.
The other important difference was setting VerticalAlignment="Top" on the first stack panel, otherwise it automatically sizes to the same height as the border.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical" Name="Left" VerticalAlignment="Top">
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="50" Margin="2"></Border>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Width="100" Height="90" Margin="2"></Border>
</StackPanel>
<Border Height="{Binding ElementName=Left, Path=ActualHeight}" >
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button Content="Some"/>
<Button Content="Buttons"/>
</StackPanel>
<Label Grid.Row="1" Content="Some Label"/>
<ListView Grid.Row="2" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListViewItem>Item1</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<!-- and so on...-->
<ListViewItem>Item8</ListViewItem>
</ListView>
</Grid>
</Border>
</Border>
</StackPanel>
</Grid>
<StackPanel>
<Grid Width="300" Height="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<Border Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2"></Border>
<Border Grid.Row="1" Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2"></Border>
</Grid>
<Border Grid.Column="1" Background="Beige" BorderThickness="1" BorderBrush="Black" Margin="2">
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Content="Some"/>
<Button Content="Buttons"/>
</StackPanel>
<Label Content="Some Label"/>
<ListView ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListViewItem>Item1</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<!-- and so on...-->
<ListViewItem>Item8</ListViewItem>
</ListView>
</StackPanel>
</Border>
</Grid>
</StackPanel>
Try this:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel
Name="FirstPanel"
Grid.Column="0"
VerticalAlignment="Top">
<Border
Background="Beige"
BorderThickness="1"
BorderBrush="Black"
Width="100"
Height="50"
Margin="2"/>
<Border
Background="Beige"
BorderThickness="1"
BorderBrush="Black"
Width="100"
Height="90"
Margin="2"/>
</StackPanel>
<Border
Name="ContainerBorder"
Grid.Column="1"
Background="Beige"
BorderThickness="1"
BorderBrush="Black"
Margin="2"
VerticalAlignment="Top"
MaxHeight="{Binding ElementName=FirstPanel, Path=ActualHeight}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button Content="Some"/>
<Button Content="Buttons"/>
</StackPanel>
<Label Grid.Row="1" Content="Some Label"/>
<ListView Grid.Row="2" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListViewItem>Item1</ListViewItem>
<ListViewItem>Item2</ListViewItem>
<ListViewItem>Item3</ListViewItem>
<ListViewItem>Item4</ListViewItem>
<ListViewItem>Item5</ListViewItem>
<ListViewItem>Item6</ListViewItem>
<ListViewItem>Item7</ListViewItem>
<ListViewItem>Item8</ListViewItem>
</ListView>
</Grid>
</Border>
</Grid>
Output:

Resize Scrollviewer and StackPanel WPF C#

how can I make the scrollviewer resize to the bottom edge of the screen, so as to maximize to resize with the mouse ? The way the code is, when the screen is maximized the scroll bar does not appear and it is not possible to scroll the contents.
My xaml File
<Window x:Class="AppSearch.MainWindow" x:Name="mainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AppSearch" Height="600" Width="820"
WindowStartupLocation="CenterScreen"
Loaded="Window_Loaded"
StateChanged="mainWindow_StateChanged"
ResizeMode="CanResize"
PreviewKeyDown="mainWindow_PreviewKeyDown">
<Grid ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="stkContentLeft"
MinWidth="510"
MinHeight="560"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
LoadCompleted="stkContentLeft_LoadCompleted"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Margin="0,0,05,0" Grid.Column="0"/>
<StackPanel Grid.Column="1" x:Name="stckContentRight" Width="276"
Height="{Binding Parent.ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}"
Orientation="Vertical"
HorizontalAlignment="Right">
<Grid VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<StackPanel Height="auto" Grid.Row="0">
<StackPanel x:Name="help" Width="20" Height="20" HorizontalAlignment="Right" Margin="0,5,10,0">
<Image Source="Imagens/help_icon.png"/>
</StackPanel>
<StackPanel x:Name="stkUcSupervisor" Height="50" Width="276" Margin="0,5,0,0" HorizontalAlignment="Center"/>
<TextBox x:Name="txtSearch"
ToolTip="put your key..."
FontSize="13"
Foreground="Black"
BorderThickness="1"
TextWrapping="Wrap"
Margin="0,5,0,05" Width="270" HorizontalAlignment="Center"/>
</StackPanel>
<ScrollViewer x:Name="scroll"
CanContentScroll="True"
IsDeferredScrollingEnabled="False"
UseLayoutRounding="False"
VerticalScrollBarVisibility="Visible"
VerticalAlignment="Top"
BorderThickness="1"
BorderBrush="Gray"
Margin="0,05,0,0"
Grid.Row="1"
Height="455">
<StackPanel x:Name="stkListOfUserControls"
CanVerticallyScroll="True"
Height="455"
OverridesDefaultStyle="False">
<StackPanel.ScrollOwner>
<ScrollViewer AllowDrop="True" />
</StackPanel.ScrollOwner>
</StackPanel>
</ScrollViewer>
</Grid>
</StackPanel>
<StackPanel x:Name="stkPopUp"
Canvas.Bottom="0"
Canvas.Left="0"
Height="285"
Width="280"
VerticalAlignment="Bottom"/>
</Grid>

StackPanel in Grid: limit height

I have a big main grid with several rows and columns. I want to place in one of these cells a vertical stackpanel. In this stackpanel there is a textblock and a scrollviewer. My problem is, that the stackpanel doesn't get limited by the cell, instead the stackpanel gets big enough to fit the whole scrollviewer.
How can I solve this?
EDIT: my xaml code:
<Grid x:Name="Grid1" Margin="120,0,0,0" Width="1244">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition Width="33*"/>
<ColumnDefinition Width="40"/>
<ColumnDefinition Width="50*"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="71"/>
<RowDefinition Height="40"/>
<RowDefinition/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<StackPanel Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="2" Margin="0">
<TextBlock TextWrapping="Wrap" FontSize="48" Margin="0" VerticalAlignment="Top" Foreground="#FF0083FF" Text="Top 10:" HorizontalAlignment="Left" FontFamily="Segoe UI Light"/>
<ScrollViewer Margin="0,20,0,0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible">
<StackPanel>
<ListView x:Name="TopListView" ItemsSource="{Binding}" SelectionMode="None" Foreground="White" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel >
<TextBlock FontSize="32" Text="1" Foreground="#FF0083FF"/>
</StackPanel>
<TextBlock Text="{Binding Text}" Foreground="Black"
FontSize="16" Margin="0,0,0,0" TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</ScrollViewer>
</StackPanel>
</Grid>
Use another Grid instead of a StackPanel:
<Grid Grid.Column="3" Grid.Row="2" Grid.ColumnSpan="2" Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock FontSize="48" FontFamily="Segoe UI Light"
Foreground="#FF0083FF" HorizontalAlignment="Left"
TextWrapping="Wrap" Text="Top 10:"/>
<ScrollViewer Grid.Row="1" Margin="0,20,0,0"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Visible">
...
</ScrollViewer>
</Grid >

How to make a grid in a DataTemplate for a ItemTemplate auto-size to ListBox width?

So I have the following DataTemplate for a ListBox.ItemTemplate:
<DataTemplate x:Key="Tweet">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
Source="{Binding ProfileImageURL}"
Width="50" Height="50"/>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0"
FontSize="15"
FontWeight="Bold"
Text="{Binding User}"/>
<TextBlock
Grid.Row="1" TextWrapping="Wrap"
Text="{Binding Status}"/>
<DockPanel
Grid.Row="2">
<TextBlock
DockPanel.Dock="Left"
FontSize="10" TextWrapping="WrapWithOverflow"
Text="{Binding TimeAgo}" TextAlignment="Justify"/>
<TextBlock
DockPanel.Dock="Left"
FontSize="10" TextWrapping="Wrap"
Text="{Binding Source}"/>
</DockPanel>
</Grid>
</Grid>
</DataTemplate>
The problem is that it doesn't auto-size to the ListBox. The text gets clipped:
TwitBy preview
How to fix it?
Here's the listBox XAML definition:
<ListBox
x:Name="tweetsListBox"
Margin="3,0"
Grid.Row="1"
Background="{x:Null}" Grid.IsSharedSizeScope="True"
ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemTemplate="{DynamicResource Tweet}"/>
Any help would be appreciated.
Thanks
Try this:
<DataTemplate x:Key="Tweet">
<Grid Width="{Binding ElementName=tweetsListBox, Path=ActualWidth>">

Categories

Resources