如何隐藏控件模板中的按钮?

时间:2012-10-17 08:33:51

标签: c# wpf xaml

当代码隐藏中的Visibility="Visible"属性为{{1>时,如何为控制模板中的按钮设置IsSendBtnVisible }}?

这是我的 WPF 页面:

true

以下是此页面上文档查看器的自定义模板

<Page 
  x:Class="CardViewPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="CardViewPage">

   <Grid Name="content" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
       <Grid.RowDefinitions>
          <RowDefinition Height="*" />
       </Grid.RowDefinitions>
       <DocumentViewer Margin="0" Grid.Row="0" Name="documentViewer" />
   </Grid>

</Page>

3 个答案:

答案 0 :(得分:0)

你需要为你的DocumentViewer声明DependancyProperty并在xaml ControlTemplate中使用TemplateBinding(例如UrProperty

<ControlTemplate TargetType="{x:Type DocumentViewer}">
          ...
          <Button Click="btnSendToServer_Click"  
                  Width="25"
                  Height="25"
                  Visibility="{TemplateBinding UrProperty}"
                  />
          ...
      </ControlTemplate>

答案 1 :(得分:0)

我建议您使用数据触发器来实现这一目标......

<Button
 Click="btnSendToServer_Click"  
                  Width="25"
                  Height="25">
            <Button.Style>
                <Style>
                    <Setter Property="Button.Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsSendBtnVisible}" Value="True">
                            <Setter Property="Button.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

确保在样式中设置已折叠的可见性,但不在按钮属性中设置。

注意:数据触发器的绑定可能会根据您的数据上下文而改变

答案 2 :(得分:0)

Dima Martovoi,bathineni - 感谢您的回复。

Dima Martovoi,我认为从DocumentViewer继承是为了解决这个小问题。 我尝试使用来自bathineni解决方案的DataTrigger变体,但它不起作用。不知道,为什么。 使用下一个绑定解决了问题:

<Button
Visibility="{Binding RelativeSource={RelativeSource AncestorType=Page},Path=SendToServerVisiblity}">
</Button>

其中

 public Visibility SendToServerVisiblity
    {
        get
        {
            if (IsOnlineMode)
                return Visibility.Visible;
            return Visibility.Collapsed;
        }
    }
页面代码隐藏

中的