C# 从CodeBehind访问列表框中画布的ScaleTransform
我的问题 我想将ScaleTransform添加到画布中,并尝试在视图的代码隐藏中为其添加代码。然而,当VisualStudio向我显示访问器时,当我试图在代码隐藏中使用它时,它会抛出一个错误 我的列表框如下所示:C# 从CodeBehind访问列表框中画布的ScaleTransform,c#,wpf,canvas,listbox,C#,Wpf,Canvas,Listbox,我的问题 我想将ScaleTransform添加到画布中,并尝试在视图的代码隐藏中为其添加代码。然而,当VisualStudio向我显示访问器时,当我试图在代码隐藏中使用它时,它会抛出一个错误 我的列表框如下所示: <Grid> <cc:ListBoxNoDragSelection ItemsSource="{Binding MainModel.Rectangles}" Background="{DynamicResource BG}" SelectedItem="{
<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>
Visual Studio一直告诉我,St
不在当前上下文中可用
我做错了什么?您只需从画布中取出
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;
}
}
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;
}
}
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;
}
}