Я полностью озадачен этим.У меня есть UserControl в UWP / C #, который содержит несколько Border
объектов, которые должны быть дверями в комнаты.У меня есть 4 свойства зависимости (по одному для каждого направления - N, S, E, W), с типом bool, каждый из которых подключен к BoolToVisibilityConverter
.Концепция заключается в том, что двери можно переключать между Visible и Collapsed, устанавливая свойство HasDirectionDoor
true или false.Насколько я могу судить, все настроено правильно, но просто не работает.Если я ставлю точку останова на Convert
и ConvertBack
методы BoolToVisConverter
, эти точки останова никогда не срабатывают, а это означает, что он даже не достигает конвертера.Тем не менее, просматривая то, что я написал, и сравнивая его с тем, что я нашел в различных руководствах, все выглядит одинаково и правильно.Может кто-нибудь, пожалуйста, посмотрите на код, я уверен, что это что-то простое, что мне не хватает, но я просто не вижу его.
BoolToVis:
namespace Crawler.Converters
{
public class BoolToVisibilityConverter : IValueConverter
{
public BoolToVisibilityConverter()
{
}
public object Convert(object value, Type targetType, object parameter, string language)
{
//return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
if (value is bool && (bool)value)
{
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && (Visibility)value == Visibility.Visible);
}
}
}
UserControl XAML:
<UserControl
x:Class="Crawler.DungeonRoom"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Crawler"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:BooleanToVisibility="using:Crawler.Converters"
mc:Ignorable="d" Background="White" Height="110" Width="110"
d:DesignHeight="110" d:DesignWidth="110">
<UserControl.Resources>
<BooleanToVisibility:BoolToVisibilityConverter x:Key="BoolToVis" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="25" />
<ColumnDefinition Width="25" />
<ColumnDefinition Width="25" />
<ColumnDefinition Width="25" />
<ColumnDefinition Width="5" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="5" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="5" />
</Grid.RowDefinitions>
<Border Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="4" Grid.RowSpan="4" Background="White" />
<Border x:Name="westDoor" Grid.Column="0" Grid.Row="2" Grid.RowSpan="2" Background="SaddleBrown" Visibility="{Binding HasWestDoor, Converter={StaticResource ResourceKey=BoolToVis}}" />
<Border x:Name="northDoor" Grid.Column="2" Grid.Row="0" Grid.ColumnSpan="2" Background="SaddleBrown" />
<Border x:Name="eastDoor" Grid.Column="5" Grid.Row="2" Grid.RowSpan="2" Background="SaddleBrown" />
<Border x:Name="southDoor" Grid.Column="2" Grid.Row="5" Grid.ColumnSpan="2" Background="SaddleBrown" />
<Border x:Name="roomIcon" Grid.Column="4" Grid.Row="1" BorderBrush="DimGray" BorderThickness="1 0 0 1">
<Image Source="Assets\MapTiles\Camp.png" />
</Border>
</Grid>
</UserControl>
UserControl C #:
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace Crawler
{
public sealed partial class DungeonRoom : UserControl
{
public static readonly DependencyProperty HasWestDoorProperty =
DependencyProperty.Register("HasWestDoor", typeof(Boolean), typeof(DungeonRoom), new PropertyMetadata(false));
public static readonly DependencyProperty HasNorthDoorProperty =
DependencyProperty.Register("HasNorthDoor", typeof(Boolean), typeof(DungeonRoom), new PropertyMetadata(false));
public static readonly DependencyProperty HasEastDoorProperty =
DependencyProperty.Register("HasEastDoor", typeof(Boolean), typeof(DungeonRoom), new PropertyMetadata(false));
public static readonly DependencyProperty HasSouthDoorProperty =
DependencyProperty.Register("HasSouthDoor", typeof(Boolean), typeof(DungeonRoom), new PropertyMetadata(false));
public static readonly DependencyProperty TypeProperty =
DependencyProperty.Register("Type", typeof(RoomType), typeof(DungeonRoom), new PropertyMetadata(0));
public bool HasWestDoor
{
get { return (bool)GetValue(HasWestDoorProperty); }
set { SetValue(HasWestDoorProperty, value); }
}
public bool HasNorthDoor
{
get { return (bool)GetValue(HasNorthDoorProperty); }
set { SetValue(HasNorthDoorProperty, value); }
}
public bool HasEastDoor
{
get { return (bool)GetValue(HasEastDoorProperty); }
set { SetValue(HasEastDoorProperty, value); }
}
public bool HasSouthDoor
{
get { return (bool)GetValue(HasSouthDoorProperty); }
set { SetValue(HasSouthDoorProperty, value); }
}
public RoomType Type
{
get { return (RoomType)GetValue(TypeProperty); }
set { SetValue(TypeProperty, value); }
}
public DungeonRoom()
{
this.InitializeComponent();
}
}
}