0

当代码隐藏中的属性为时,如何Visibility="Visible"控件模板内的按钮设置?IsSendBtnVisibletrue

这是我的WPF页面:

<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>

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

<Style TargetType="{x:Type DocumentViewer}">
   ...
   <Setter Property="Template">
   <Setter.Value>
      <ControlTemplate TargetType="{x:Type DocumentViewer}">
         ...
         <Button 
            Click="btnSendToServer_Click"  
            Width="25"
            Height="25"
            Visibility="Collapsed" />
         ...
      </ControlTemplate>
   </Setter>
   ...
</Style>
4

3 回答 3

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>

确保在样式中将可见性设置为折叠,而不是在按钮属性中。

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

于 2012-10-17T08:43:26.183 回答
0

您需要为您的 DocumentViewer声明DependancyPropertyTemplateBinding并在 xaml ControlTemplate 中使用(UrProperty例如)

<ControlTemplate TargetType="{x:Type DocumentViewer}">
          ...
          <Button Click="btnSendToServer_Click"  
                  Width="25"
                  Height="25"
                  Visibility="{TemplateBinding UrProperty}"
                  />
          ...
      </ControlTemplate>
于 2012-10-17T08:36:27.447 回答
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;
        }
    }

在页面代码隐藏中

于 2012-10-18T11:58:57.777 回答