Замените вашу сетку верхнего уровня
<Grid x:Name="MainGrid" Width="286" ...>
с помощью Canvas и установите свойство ClipToBounds :
<Canvas Name="MainCanvas" Width="286" ClipToBounds="True">
Кроме того, вы должны установить свойство Height
этих сеток в трех столбцах, которые не имеют никакого содержимого. Установка только фона для ImageBrush не повлияет на размер сетки. В результате три решетки имеют Width=286
(в результате 858 разделены на три столбца), а левая и правая решетки имеют Height=0
, потому что они не имеют содержимого. Средний получает высоту от содержащейся метки и, следовательно, виден.
Вместо установки ImageBrush вы также можете поместить элемент управления Image в каждый столбец Grid. Таким образом, высоты трех сеток будут установлены автоматически.
Конечно, ClipToBounds также работает с Grid, но кажется, что Grid не будет перерисовывать ранее невидимые части его содержимого, когда к этому содержимому применяется RenderTransform.
При использовании Canvas вы можете также анимировать свойство Canvas.Left
вместо использования TranslateTransform.
РЕДАКТИРОВАТЬ: Вот XAML из моей тестовой программы:
<Window x:Class="SlidingGrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="400">
<Canvas Width="286" ClipToBounds="True" Margin="10">
<Grid Width="858" Name="grid" Canvas.Left="0" Height="400">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RenderTransform>
<TranslateTransform x:Name="slideTransform"/>
</Grid.RenderTransform>
<Grid Grid.Column="0">
<Grid.Background>
<ImageBrush ImageSource="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg" Stretch="UniformToFill"/>
</Grid.Background>
</Grid>
<Grid Grid.Column="1">
<Grid.Background>
<ImageBrush ImageSource="C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg" Stretch="UniformToFill"/>
</Grid.Background>
</Grid>
<Grid Grid.Column="2">
<Grid.Background>
<ImageBrush ImageSource="C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg" Stretch="UniformToFill"/>
</Grid.Background>
</Grid>
</Grid>
</Canvas>
</Window>
и код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += (o, e) =>
{
//grid.BeginAnimation(
// Canvas.LeftProperty,
// new DoubleAnimation(-572, TimeSpan.FromSeconds(2)));
slideTransform.BeginAnimation(
TranslateTransform.XProperty,
new DoubleAnimation(-572, TimeSpan.FromSeconds(2)));
};
}
}