У меня есть собственный элемент управления IPAddressBox в проекте WPF / C #, который я унаследовал.Элемент управления работает отлично, но он не позволяет мне изменять фон в XAML, когда элемент управления отключен (я могу успешно изменить его с помощью кода позади, но я отчаянно пытаюсь разорвать связь между пользовательским интерфейсом и бизнес-логикой и хочучтобы избавиться от «Знания каждой детали пользовательского интерфейса в моем бизнес-коде»
У меня есть несколько элементов управления, которые включаются / отключаются в зависимости от выбора поля со списком - поле со списком резервных копий - с двумя вариантами выбора - DVD-RW или Сеть. Если они выбирают Сеть, у меня есть элемент управления IPAddress и элементы управления текстом / паролем для учетных данных. Я могу успешно включить / отключить элементы управления, привязав свойство IsEnabled в классе, но не могу получитьфон элемента управления IP стал серым. У меня есть весь код элемента управления (XAML & CS), а также мой собственный код - я довольно новичок в WPF и пытаюсь научиться делать все правильно, а не сразу маршрутизировать всесобытия в CS и делаю это там ....
Вот частьмой XAML с моей (последней) попыткой изменить фон:
<automation:IPAddressBox Grid.Column=" 4" Grid.Row="4"
Name="ipAddressBox_BackupIpAddress" Background="White"
IsEnabled="{Binding Path=IsBackupEnabled}">
<automation:IPAddressBox.Style>
<Style TargetType="{x:Type automation:IPAddressBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsBackkupEnabled}" Value="false">
<Setter Property="Background" Value="LightGray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</automation:IPAddressBox.Style>
</automation:IPAddressBox> "
<-- Other related controls -->
<Label Grid.Column="6" Grid.Row="2" Name="label_BackupUserID" Content="User ID:"
HorizontalAlignment="Right" IsEnabled="{Binding Path=IsBackupEnabled}" />
<TextBox Grid.Column="8" Grid.Row="2" Name="txtBackupUserID"
IsEnabled="{Binding Path=IsBackupEnabled}" />
<Label Grid.Column="6" Grid.Row="4" Name="label_BackupPassword" Content="Password:"
HorizontalAlignment="Right" IsEnabled="{Binding Path=IsBackupEnabled}" />
<PasswordBox Grid.Column="8" Grid.Row="4" Name="passwordBox_BackupPassword"
IsEnabled="{Binding Path=IsBackupEnabled}" />
Обратите внимание, что я устанавливаю цвет фона на Белый, так как базовый элемент управления "прозрачен" по некоторым причинам.Я пробовал различные стили / триггеры как на контроллере, так и в моем собственном коде, всем не повезет, если я сделаю то, что мне нужно - то есть, чтобы фон стал серым
- вот контрольный XAML для справки- Я не уверен, что мне нужно включить общедоступные свойства, доступные в элементе управления, и есть в основном два интереса - Foreground (тип кисти) и BorderBrush (также тип кисти) - я попытался добавить IsEnabled к свойствам элемента управления, пытаясь изменить фон там - опять же без удачи - единственное место, где он работает - это "OnSelectionChanged для выпадающего списка в моем коде.
Вот упрощенный xaml для IpAddressBox (я удалилнесколько всплывающих окон, отображающих недопустимые значения)
<UserControl.Resources>
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBoxBase}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<ScrollViewer x:Name="PART_ContentHost" Margin="0,3,0,0" />
</ControlTemplate>
</Setter.Value>
</Setter/>
</Style>
</UserControl.Resources>
<Border Name="border_IpAddressBox" BorderBrush="Black" BorderThickness="1">
<Grid>
<automation:NumericTextBox Height="23" x:Name="numericTextBox1" Width="30"
MinWidth="30" MaxWidth="30" HorizontalAlignment="Left" VerticalAlignment="Top"
BorderBrush="Transparent" MaxLength="3" HorizontalContentAlignment="Center"
ContextMenu="{StaticResource contextMenu_TextBox}" Background="Transparent"
Style="{StaticResource textBoxStyle}" />
<automation:NumericTextBox Height="23" Margin="42,0,0,0" x:Name="numericTextBox2"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="30" MinWidth="30"
MaxWidth="30" BorderBrush="Transparent" MaxLength="3"
HorizontalContentAlignment="Center" ContextMenu="{StaticResource
contextMenu_TextBox}" Background="Transparent"
Style="{StaticResource textBoxStyle}" IsTabStop="False" />
<automation:NumericTextBox Height="23" Margin="84,0,0,0" x:Name="numericTextBox3"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="30" MinWidth="30"
MaxWidth="30" BorderBrush="Transparent" MaxLength="3"
HorizontalContentAlignment="Center" ContextMenu="{StaticResource
contextMenu_TextBox}" Background="Transparent" Style="{StaticResource
textBoxStyle}" IsTabStop="False" />
<automation:NumericTextBox Height="23" Margin="126,0,0,0" x:Name="numericTextBox4"
VerticalAlignment="Top" HorizontalAlignment="Left" Width="30" MinWidth="30"
MaxWidth="30" BorderBrush="Transparent" MaxLength="3"
HorizontalContentAlignment="Center" ContextMenu="{StaticResource
contextMenu_TextBox}" Background="Transparent" Style="{StaticResource
textBoxStyle}" IsTabStop="False" />
<Label Name="label1" Height="23" Margin="30,0,0,0" VerticalAlignment="Top"
HorizontalAlignment="Left" Width="12">.</Label>
<Label Name="label2" Height="23" HorizontalAlignment="Left" Margin="72,0,0,0"
VerticalAlignment="Top" Width="12">.</Label>
<Label Name="label3" Height="23" HorizontalAlignment="Left" Margin="114,0,0,0"
VerticalAlignment="Top" Width="12">.</Label>
</Grid>
</Border>
</UserControl>
NumericTextBox - это просто еще один пользовательский элемент управления, ограничивающий ввод текста числовыми значениями - только реализация CS, без участия XAML.
Заранее спасибо за любыепомощь - 20 лет в разработке программного обеспечения, и это мой первый вопрос, который я когда-либо отправлялed - Google обычно делает трюк, но не в этот раз:)
- Брайан