我的问题
我想在我的Canvas中添加一个ScaleTransform,并尝试在我的视图后面的代码中添加代码。但是,当VisualStudio向我显示访问器时,当我尝试在后面的代码中使用它时会抛出错误。
我的ListBox看起来像这样:
Apache Ant(TM) version 1.9.6 compiled on July 8 2015
重要的部分是:
<Grid>
<cc:ListBoxNoDragSelection ItemsSource="{Binding MainModel.Rectangles}" Background="{DynamicResource BG}" SelectedItem="{Binding Selected}"
BorderThickness="0" x:Name="ListBoxNoDragSelection">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="MockupCanvas" MouseWheel="MockupCanvas_OnMouseWheel" Background="Transparent">
<Canvas.RenderTransform>
<ScaleTransform x:Name="St"/>
</Canvas.RenderTransform>
<Canvas.ContextMenu>
<ContextMenu>
<MenuItem Header="New rectangle" Command="{Binding AddNewRectangleToCollectionCommand}"/>
<MenuItem Header="Delete selected rectangle" Command="{Binding TryDeleteRectangleFromCollectionCommand}"/>
</ContextMenu>
</Canvas.ContextMenu>
</Canvas>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
<Setter Property="Canvas.ZIndex" Value="{Binding Z}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel Height="Auto" Width="{Binding Width}">
<Label DockPanel.Dock="Top" Content="{Binding Name}" Foreground="{DynamicResource Foreground}" IsHitTestVisible="False"/>
<Rectangle Width="{Binding Width}" Height="{Binding Height}" DockPanel.Dock="Bottom"
Fill="Transparent" Stroke="White" StrokeThickness="3" RadiusX="10" RadiusY="10" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</cc:ListBoxNoDragSelection>
</Grid>
代码隐藏:
<Canvas x:Name="MockupCanvas" MouseWheel="MockupCanvas_OnMouseWheel" Background="Transparent">
<Canvas.RenderTransform>
<ScaleTransform x:Name="St"/>
</Canvas.RenderTransform>
<Canvas.ContextMenu>
<ContextMenu>
<MenuItem Header="New rectangle" Command="{Binding AddNewRectangleToCollectionCommand}"/>
<MenuItem Header="Delete selected rectangle" Command="{Binding TryDeleteRectangleFromCollectionCommand}"/>
</ContextMenu>
</Canvas.ContextMenu>
</Canvas>
Visual Studio一直告诉我private void MockupCanvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
{
St.ScaleX *= ScaleRate;
St.ScaleY *= ScaleRate;
}
else
{
St.ScaleX /= ScaleRate;
St.ScaleY /= ScaleRate;
}
}
不在当前上下文中。
我做错了什么?
答案 0 :(得分:1)
您可以从画布中取出ScaleTransform
,而不是按名称访问它:
private void MockupCanvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
var scaleTransformation = (sender as Canvas)?.RenderTransform as ScaleTransform;
if (scaleTransformation == null)
return;
if (e.Delta > 0)
{
scaleTransformation.ScaleX *= ScaleRate;
scaleTransformation.ScaleY *= ScaleRate;
}
else
{
scaleTransformation.ScaleX /= ScaleRate;
scaleTransformation.ScaleY /= ScaleRate;
}
}