2015-11-05 2 views
0

У меня возникла проблема с привязкой к видимости моего usercontrol.Переплетная видимость usercontrol не сворачивает управление

Связывание с зависимым свойством Тип Видимость отлично работает и правильное значение (в данном случае Collapsed) удерживается DP. Содержимое моей сетки в UserControl настроено на сбой, но управление отверстиями не разрушается. Он по-прежнему удерживает занятое пространство определенным с помощью и значением, как указано в xaml.

EDIT: я узнал, что проблема в том, что я задал ширину и высоту в xaml, где я ссылаюсь на свой usercontrol. если я этого не делаю, управление рушится правильно (поэтому привязка работает нормально). Но мне нужно установить ширину и высоту в случае видимости usercontrol.

Любая идея, как я могу решить эту проблему?

<my:MenuButtonBase x:Class="bxSuite.Controls.MenuButtonLarge" 
      xmlns:my="clr-namespace:bxSuite.Controls" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      Background="Black" 
      > 
    <Grid Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=ButtonVisibility}" > 
     <StackPanel> 
      <Image Source="{Binding ButtonImageSource}" Margin="5,10,5,5" Width="48" Height="48" VerticalAlignment="Top" HorizontalAlignment="Center" /> 
      <TextBlock Text="{Binding FunctionHeader}" Foreground="White" TextWrapping="Wrap" TextAlignment="Center" Padding="5,5,5,5" FontSize="12" /> 
     </StackPanel> 
    </Grid> 
</my:MenuButtonBase> 

В XAML я ссылаться мой UserControl как это (где конвертер производит видимость-состояние правильно):

<my:MenuButtonLarge Name="btnInEuqipment" ButtonVisibility="{Binding Path=User, Converter={StaticResource ConverterUserRightVisibility}, ConverterParameter=5}" VerticalAlignment="Top" FunctionHeader="{lex:Loc Key=MenuButton_InEquipment}" Width="130" ButtonImageSource="/bxSuite.RolloutManager;component/Images/inequipment_48x48.png" BackgroundEnabled="#FF0694FD" BackgroundHover="#FF0072C6" MenuButtonClick="btnInEuqipment_MenuButtonClick" Height="95" Margin="5,10,0,0" /> 

ответ

0

Попробуйте установить видимость пользовательского элемента управления вместо сетки, должны работать.

Ваш код должен быть таким.

<my:MenuButtonBase x:Class="bxSuite.Controls.MenuButtonLarge" 
     xmlns:my="clr-namespace:bxSuite.Controls" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=ButtonVisibility}" 
     Background="Black"> 
<Grid> 
    <StackPanel> 
     <Image Source="{Binding ButtonImageSource}" 
       Margin="5,10,5,5" 
       Width="48" 
       Height="48" 
       VerticalAlignment="Top" 
       HorizontalAlignment="Center" /> 
     <TextBlock Text="{Binding FunctionHeader}" 
        Foreground="White" 
        TextWrapping="Wrap" 
        TextAlignment="Center" 
        Padding="5,5,5,5" 
        FontSize="12" /> 
    </StackPanel> 
</Grid> 

Не забудьте обновить RelativeSource вашего затруднительное.

+0

Hi Bruno, thanx для вашего предложения. Я написал так, как вы написали, но в результате UControl отображается как видимый. Но я думаю, что это может быть потому, что я не понимаю, что вы подразумеваете под «не забывайте обновлять относительный источник вашей привязки». Я скопирую ссылку на xaml на указанный выше билет, чтобы показать вам, как я использую свой пользовательский контроль. – Mike

Смежные вопросы