В одном из моих приложений у меня есть пользовательский контроль под названием FeedControl (да, это еще одна программа для чтения RSS!), Которая очень проста - просто флажок, чтобы выбрать элемент, текстовый блок, чтобы показать имя канала, и другой текстовый блок, чтобы показатьколичество непрочитанных фидов.При загрузке каналов в наблюдаемую коллекцию при запуске я затем создаю один экземпляр элемента управления для каждого канала и добавляю их все в список - на самом деле довольно простые вещи.
Код XAML ниже:
<UserControl x:Class="MyReader.FeedControl"
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"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
Loaded="UserControl_Loaded" >
<Grid x:Name="LayoutRoot" Height="50" Background="Black" HorizontalAlignment="Left" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
<CheckBox Name="Select" Grid.Column="0" IsChecked="{Binding IsSelected}" Margin="-5,-16" Checked="Select_Checked" Background="White"/>
<TextBlock Name="FeedName" Grid.Column="1" Text="{Binding FeedName}" Opacity="1" Margin="-20" VerticalAlignment="Center" FontSize="24"
MouseLeftButtonUp="FeedName_MouseLeftButtonUp" Height="32" Width="360"/>
<TextBlock Name="UnreadItems" Grid.Column="2" Text="{Binding UnreadItems}" Opacity="1" Padding="2" VerticalAlignment="Center" HorizontalAlignment="Right"
FontSize="24" MouseLeftButtonUp="FeedName_MouseLeftButtonUp" />
</Grid>
Когда меняется ориентация страницы, включается список элементов Feedcontrol. Я хочу, чтобы текстовое поле имени канала изменилось на правильный размер (560px для альбомной ориентации, 360px для портретной), поэтому я предположил, установивширина столбца сетки в «*» или «Авто» и не устанавливая ширину для текстового блока, он будет автоматически изменять размер, но он будет изменяться только по ширине текста, а не по всей ширине.
Итак, я попытался установить для текстового блока размер портрета по умолчанию (360) в XAML, и в случае изменения ориентации страницы я вызываю следующий метод в каждом экземпляре FeedControl, который в данный момент находится в ListBox:
public void ChangeOrientation(bool isLandscape)
{
if (isLandscape)
{
this.LayoutRoot.Width = App.LandscapeWidth; //700
this.FeedName.Width = App.LandscapeItemWidth; //560
}
else
{
this.LayoutRoot.Width = App.PortraitWidth; //480
this.FeedName.Width = App.PortraitItemWidth; //360
}
this.InvalidateArrange();
this.InvalidateMeasure();
}
Однако, это тоже не работает (независимо от того, что я пытаюсь), поэтому я не понимаю, как лучше это сделать ... Я знаю, что должен быть действительно простой способ, но пока я ненашел его.
Может кто-нибудь указать мне правильное направление, пожалуйста?
Майк
PS извините за длину сообщения ... так долго для такой простой проблемы!!