我有以下XAML标记,其中我在data Natty :: Nat -> * where
Zy :: Natty 'Z
Sy :: Natty n -> Natty ('S n)
plus :: Natty m -> Natty n -> Natty (m :+ n)
plus Zy n = n
plus (Sy m) n = Sy (plus m n)
times :: Natty m -> Natty n -> Natty (m :* n)
times Zy _ = Zy
times (Sy m) n = n `plus` (m `times` n)
square :: Natty n -> Natty (n :* n)
square n = times n n
内的<Image>
内嵌入了几个<StackPanel>
标记,位于<Grid>
内:
<ControlTemplage>
我可以在Visual Studio的预览窗口中看到这些图像在我的GUI上<Window.Resources>
<Style...>
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid ...>
...
<StackPanel Grid.Row="1" Orientation="Horizontal" FlowDirection="RightToLeft">
<Image x:Name="connectedFlag" ... />
<Image x:Name="disconnectedFlag" ... />
</StackPanel>
</Grid>
</ControlTemplate>
</Setter>
</Setter>
</Style>
</Window.Resources>
的{{1}}内正确显示,但是,我现在想要从我的C#中访问图像,以便我可以调用函数来显示/隐藏图像,具体取决于我的应用程序是否连接到服务器。
我的C#中有一个<Grid>
方法,其中我尝试设置<ControlTemplate>
的{{1}}属性&amp; continuousThread()
取决于满足的条件,即
Visibility
但是,我在C#中遇到了一些编译错误:
名称&#39; disconnectedFlag&#39;在当前上下文中不存在 名称&#39; connectedFlag&#39;在当前上下文中不存在
为什么我不能引用我的标记&#39; connectedFlag
文件中的变量?有人有什么建议吗?
答案 0 :(得分:0)
想象一下,该模板实例化了两次,或十九次,或300次。这是WPF中模板的默认情况。当您在不同的地方有300个名称时,您希望该名称引用哪个disconnectedFlag
?没有办法打电话。如果它还没有被实例化怎么办?你想要做的是荒谬。
您应该尝试使用ControlTemplate
中的触发器完成的操作。
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid ...>
...
<StackPanel Grid.Row="1" Orientation="Horizontal" FlowDirection="RightToLeft">
<Image x:Name="connectedFlag" ... />
<Image x:Name="disconnectedFlag" ... />
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Condition}" Value="True">
<Setter TargetName="connectedFlag" Value="Hidden" />
<Setter TargetName="disconnectedFlag" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding Condition}" Value="False">
<Setter TargetName="connectedFlag" Value="Visible" />
<Setter TargetName="disconnectedFlag" Value="Hidden" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Condition
应在您的viewmodel上公开,作为在其值更改时引发PropertyChanged
的属性。如果您没有视图模型,我们可以在您的视图中定义它,并为它设计一个不同的绑定,以便以这种方式工作。
答案 1 :(得分:0)
所以这个问题与XAML放置<Image>
标签的位置有关...为了摆脱编译错误,将图像放在GUI上我想要的位置,我搬了<StackPanel>
&amp;之外的图像<TabItem>
标记,但将其保留在<Grid>
:
<Grid>
<Image...>... </Image>
<TabControl...>
<TabItem...>
<StackPanel ...>