【问题标题】:How to change the visibility of a button in windows phone 8 dynamically如何动态更改 Windows Phone 8 中按钮的可见性
【发布时间】:2015-06-15 09:06:29
【问题描述】:

我有两个文本块和一个按钮的 ListBox。默认情况下,按钮的可见性是折叠的。

列表框

 <ListBox x:Name="companiesList" Height="{Binding ActualHeight, ElementName=ContentPanel}"  SelectionChanged="companiesList_SelectionChanged" ScrollViewer.VerticalScrollBarVisibility="Auto">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="listItem" Background="{Binding BackgroundBrush}">

                        <Grid.RowDefinitions>
                            <RowDefinition Height="50"/>
                            <RowDefinition Height="35"/>
                            <RowDefinition Height="40"/>
                            <RowDefinition Height="10"/>
                        </Grid.RowDefinitions>

                        <StackPanel x:Name="namePanel" Grid.Row="0" Orientation="Horizontal" Margin="5,0,0,0" Height="50">
                            <TextBlock x:Name="nameTextBlock" Text="{Binding CompanyName}" Foreground="#FF501F6E" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="28" MaxHeight="50" TextTrimming="WordEllipsis" Margin="0,0,0,0" Width="460" FontWeight="Bold" FontFamily="Fonts/Riwaj.ttf#Riwaj"/>
                        </StackPanel>

                        <StackPanel x:Name="addressPanel" Grid.Row="1" Orientation="Horizontal" Margin="5,-5,0,5" Height="35">
                            <TextBlock x:Name="addressTextBlock"  Text="{Binding Address}" Foreground="#FF1F1F1F" Style="{StaticResource PhoneTextNormalStyle}" HorizontalAlignment="Left" FontSize="20" MaxHeight="35" TextTrimming="WordEllipsis" Margin="0,0,0,0" Width="460" FontFamily="Fonts/Riwaj.ttf#Riwaj"/>
                        </StackPanel>

                        <StackPanel x:Name="phonePanel" Grid.Row="2" Orientation="Horizontal" Margin="5,0,0,0" Height="35">
                            <Button x:Name="sponseredButton" Style ="{StaticResource ButtonStyleIB}"  HorizontalAlignment="Right" Click="spon_button_clicked" Width="Auto" Height="Auto" Visibility="Collapsed">
                                <Image x:Name="sponseredButtonImage" Source="{Binding SponseredImageSource}" Stretch="None" />
                            </Button>
                        </StackPanel>

                        <Image  x:Name="line" Grid.Row="3" Width="460" HorizontalAlignment="Center" Source="Images/separator.png"  />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

现在在我的文件(.cs 文件)后面的代码中,我想根据某些条件更改按钮的可见性。

请帮助我如何做到这一点。

【问题讨论】:

  • :你必须使用可视化树的概念......它会为你工作

标签: c# xaml windows-phone-8 datatemplate code-behind


【解决方案1】:

您可以简单地通过在XAML 中将按钮的Visibility 属性设置为Collapsed 并在满足CS 代码中的特定条件时将按钮的Visibility 设置为“可见”。

在 XAML 后面的 .cs 代码中添加这个 sn-p:

sponseredButton.Visibility = Visibility.Visible;

【讨论】:

    【解决方案2】:

    你已经使用 visul 树来查找列表框项

    How to access a Control placed inside ListBox ItemTemplate in WP7

    如果有任何疑问,请告诉我

    【讨论】:

      【解决方案3】:

      您真正需要的是转换器。假设您希望该按钮仅对特定赞助商可见:

      <StackPanel x:Name="phonePanel" Grid.Row="2" Orientation="Horizontal" Margin="5,0,0,0" Height="35">
          <Button x:Name="sponseredButton" Style ="{StaticResource ButtonStyleIB}"  HorizontalAlignment="Right" Click="spon_button_clicked" Width="Auto" Height="Auto" Visibility="{Binding SponseredName Converter={StaticResource SponsorConverter}}">
              <Image x:Name="sponseredButtonImage" Source="{Binding SponseredImageSource}" Stretch="None" />
          </Button>
      </StackPanel>
      

      和转换器如下:

      public class SponsorConverter : IValueConverter
      {
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
              // Assuming that you have the sponsor's name as string as follows: 
              var sn = SponseredName.ToString();
      
              if (sn.Equals("A"))
                 return Visibility.Visible;
              elseif () ...
      
              return Visibility.Collapsed;
          }
      
          public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
          {
              return Visibility.Collapsed;
          }
      }
      

      不要忘记在您将使用它的 XAML 文件中定义您的转换器。

      了解更多关于转换器here

      【讨论】:

        猜你喜欢
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        • 2016-08-26
        相关资源
        最近更新 更多