Я пытаюсь сделать пользовательский элемент управления, который содержит три разные страницы, каждый из которых отображает различный контент. Моя идея состояла в том, чтобы сделать следующее: создать основную сетку управления пользователя, затем создать другую сетку с шириной, установленной в три раза шириной пользовательского элемента управления или главной сеткой, а затем создать в ней три столбца. Затем я создам сетку для каждого из столбцов, обертывая каждое содержимое страницы. Затем создайте две кнопки для перемещения страниц, изменив их с помощью анимации трансляционного преобразования.Как сделать многостраничный UserControl в WPF?
Я сделал все в порядке, но скольжение не работает, как я ожидал: когда сетка переведена, содержимое новой страницы не отображается, а другая страница остается видимой в стороне пользовательский контроль.
Код выглядит следующим образом:
.cs
private void TranslateMainGrid(bool right)
{
DoubleAnimation gridTranslateAnimation = new DoubleAnimation(); // Calculations not important
gridTranslateAnimation.From = right ? 0 - (this.SelectedPanel - 1) * 286 : 0 - (this.SelectedPanel + 1) * 286;
gridTranslateAnimation.To = 0 - this.SelectedPanel * 286;
gridTranslateAnimation.Duration
= new Duration(new TimeSpan(0, 0, 0, 0, 500));
TranslateTransform oTransform
= (TranslateTransform)PanelGrid.RenderTransform;
oTransform.BeginAnimation(TranslateTransform.XProperty,
gridTranslateAnimation);
}
.xaml
<Grid x:Name="MainGrid" Height="400" Width="286" Background="#7B9D9D9D" RenderTransformOrigin="0.5,0.5">
<Grid x:Name="PanelGrid" Height="400" Width="858" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TranslateTransform X="0"/>
</Grid.RenderTransform>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="ChimeraGrid" Grid.Column="0">
<Grid.Background>
<ImageBrush ImageSource="/GameView;component/Resources/arcaneCreature.png"/>
</Grid.Background>
</Grid>
<Grid x:Name="CreatureGrid" Grid.Column="1">
<Grid.Background>
<ImageBrush ImageSource="/GameView;component/Resources/chimeraTest.png"/>
</Grid.Background>
<Label Content="lolololol" Height="81" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164"/>
</Grid>
<Grid x:Name="EquipmentGrid" Grid.Column="2">
<Grid.Background>
<ImageBrush ImageSource="/GameView;component/Resources/tribeCreature.png"/>
</Grid.Background>
</Grid>
</Grid>
</Grid>
Код был упрощаются но я думаю, что это иллюстрирует весь материал. Как я могу справиться с этими сетками? Есть ли другой способ сделать то, что я намеревался здесь?
Благодаря
Он работает хорошо для половины моей проблемы, которая не показывает, что на не отображается стр. Проблема в том, что изображения других страниц не отображаются. –
См. Мой отредактированный ответ. Вы должны установить высоту сетки или использовать элементы управления изображением вместо ImageBrush. – Clemens
Я пробовал все, что вы сказали, но ничего не работало/Возможно, «canvas.left» сделает трюк. –