Если я установлю для поля этого ItemsPresenter значение -100 с каждой стороны, в некоторых точках это сработает, но поведение будет странным, непредсказуемым и зависит от ширины окна. Какое другое решение может быть?
Вы правы в установке Margin
этого ItemsPresenter
, но я думаю, что значение -100 не может решить проблему здесь, и оно должно зависеть от ширины FilpView
, а не ширины окна. Здесь у меня есть решение, также устанавливающее свойство Margin
:
<ItemsPresenter Margin="{Binding Width, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource marginvct}}" />
А мой преобразователь такой:
public class MarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var width = (double)value;
double itemmargin = width / 6;
Thickness margin = new Thickness(itemmargin, 0, itemmargin, 0);
return margin;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Как вы можете видеть из этого кода, я устанавливаю ширину каждого элемента в 2/3 от всей ширины FlipView
и оставляю слева и справа пространство с 1/6 ширины FlipView
, так что следующий, текущий и предыдущие элементы должны отображаться вместе.
А так как я привязываю значение Margin
к Width
, при использовании FlipView
сейчас должно быть установлено свойство Width
. Вы сказали, что это зависит от размера окна, я думаю, вы хотите, чтобы ширина вашего FlipView
была равна ширине окна, поэтому, например, вы можете написать такой код:
<FlipView ItemsSource="{x:Bind collection}" Style="{StaticResource FlipViewStyle}" Width="{x:Bind CustomWidth}">
<FlipView.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.Background>
<ImageBrush ImageSource="{Binding ContactImage}" />
</Grid.Background>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse Width="200" Height="200">
<Ellipse.Fill>
<ImageBrush ImageSource="{Binding ContactImage}" />
</Ellipse.Fill>
</Ellipse>
<TextBlock Margin="0,30,0,0" Text="{Binding ContactName}" FontSize="25" FontWeight="Bold" />
<TextBlock Margin="0,15,0,0" Text="{Binding ContactNumber}" FontSize="20" />
<TextBlock Margin="0,15,0,0" Text="{Binding ContactAddress}" FontSize="20" />
</StackPanel>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
Код для CustomWidth
выглядит следующим образом:
private double CustomWidth;
public MainPage()
{
this.InitializeComponent();
CustomWidth = Window.Current.Bounds.Width;
}
Вот изображение рендеринга этой демонстрации: ![введите здесь описание изображения](https://i.stack. imgur.com/tZzNP.gif)
person
Grace Feng
schedule
23.06.2016