Изменение размера ползунка при изменении ориентации страницы - PullRequest
3 голосов
/ 23 февраля 2012

Кто-нибудь сталкивался с этой проблемой в Windows Phone 7.1?

У меня есть простая страница с ползунком вверху, растянутая на полную ширину.Страница поддерживает изменения ориентации.

Если вы запускаете приложение и запускаете в портретном режиме, поместите ползунок в середину панели.Теперь измените ориентацию, чтобы перейти в режим Lanscape.Теперь переместите ползунок полностью вправо (максимальное значение).Теперь вернитесь назад к портрету - что вы видите?

Я вижу ползунок, но кнопка не отображается на экране, и если я нажимаю в любом месте ползунка, чтобы переместить кнопку панели, требуется несколько попыток.Похоже, это происходит потому, что размер слайдера изменен неправильно.Похоже, это происходит только в том случае, если значение ползунка максимально.

Кто-нибудь еще видел эту проблему?Проблема одинакова на эмуляторе и на моем устройстве HTC Mozart.

Попробуйте, запустите его в ландшафтном режиме, переместите ползунок вправо, затем перейдите в портретный режим и обратите внимание на ползунокконец теперь не виден.

<phone:PhoneApplicationPage 
x:Class="SliderRedrawPageOrientation.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
shell:SystemTray.IsVisible="True">

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
        <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <Slider HorizontalAlignment="Stretch"></Slider>
    </Grid>
</Grid>

1 Ответ

2 голосов
/ 28 апреля 2012

Я мог воспроизвести эту проблему, и это происходит, даже когда ползунок меньше, чем MaxValue.Вот решение, которое использует BackgroundWorker и быстрый сон;немного взломать, но это решает проблему:

public MainPage()
{
    InitializeComponent();

    this.OrientationChanged += OnOrientationChanged;
}

private void OnOrientationChanged( object sender, OrientationChangedEventArgs e )
{
    double val = MySlider.Value;
    MySlider.Value = 0;

    var bw = new BackgroundWorker();
    bw.DoWork += ( _, __ ) => Thread.Sleep( 100 );
    bw.RunWorkerCompleted += ( _, __ ) => Dispatcher.BeginInvoke( () => MySlider.Value = val );
    bw.RunWorkerAsync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...