WPF: ScrollBar не активируется в ScrollViewer
WPF
Почему ScrollBar не активируется в ScrollViewer при увеличении масштаба?
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="356" Width="804">
<Grid>
<ScrollViewer
PreviewMouseWheel="ScrollViewer_PreviewMouseWheel"
VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible">
<Canvas>
<Canvas.LayoutTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform"/>
</TransformGroup>
</Canvas.LayoutTransform>
<TextBlock Canvas.Left="34" Canvas.Top="47" Name="textBlock1" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
<TextBlock Canvas.Left="310" Canvas.Top="46" Name="textBlock4" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
<TextBlock Canvas.Left="188" Canvas.Top="157" Name="textBlock11" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
</Canvas>
</ScrollViewer>
</Grid>
</Window>
CS:
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
scaleTransform.ScaleY =
scaleTransform.ScaleX += 0.1;
else
scaleTransform.ScaleY =
scaleTransform.ScaleX -= 0.1;
}
Почему полоса прокрутки не активируется при увеличении масштаба?
3 ответа
Вам нужно установить ширину и высоту для него (это не будет работать в авто)
то есть:<Canvas Width="250" Height="235">
примерил и получилось, удачи!
Canvas не изменяет размер содержимого. Вы должны использовать другую панель. Сетка например:
<ScrollViewer
PreviewMouseWheel="ScrollViewer_PreviewMouseWheel"
VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible">
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform"/>
</TransformGroup>
</Grid.LayoutTransform>
<TextBlock Margin="34,47" Name="textBlock1" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
<TextBlock Margin="310,46" Name="textBlock4" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
<TextBlock Margin="188,157" Name="textBlock11" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
</Grid>
</ScrollViewer>
Также я думаю, что вам нужно пометить событие как обработанное, чтобы предотвратить вертикальную прокрутку:
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
scaleTransform.ScaleY =
scaleTransform.ScaleX += 0.1;
else
scaleTransform.ScaleY =
scaleTransform.ScaleX -= 0.1;
e.Handled = true;
}
Как уже упоминал Марат, холст не меняет своего размера после своего содержания. Но мы можем сделать это следующим образом, назвав родительское окно, например, "myWpfApplication4.MainWindow" и:
<Canvas
Height="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualHeight}"
Width="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualWidth}">