Я хочу создать окно, похожее на экран Android, показывающий состояние bluetooth, wifi ..etc. У меня есть класс, который проверяет состояние указанного устройства и возвращает значение байта 0 для off, 1 для включения и 0xFF для ошибки. Затем я сделал кнопку (вероятно, должно быть ToggleButton..but я новичок в WPF)Как использовать расширенный пользовательский контроль и использовать его в окне
public class ToggleTaskButton : System.Windows.Controls.Primitives.ButtonBase
{
public ImageSource ImageSource
{
get { return (ImageSource)GetValue(ImageSourceProperty); }
set { SetValue(ImageSourceProperty, value); }
}
public Color MyBackgroundColor
{
get { return (Color)GetValue(MyBackgroundColorProperty); }
set { SetValue(MyBackgroundColorProperty, value); }
}
// Using a DependencyProperty as the backing store for MyBackgroundColor. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyBackgroundColorProperty =
DependencyProperty.Register("MyBackgroundColor", typeof(Color), typeof(ToggleTaskButton), new PropertyMetadata(null));
// Using a DependencyProperty as the backing store for ImageSource. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ToggleTaskButton), new UIPropertyMetadata(null));
}
примечание о том, что класс выше, что я имею в виду, что я не хочу свойство зависимостей? ? Вместо этого я предпочел бы установить значение, а цвет фона изменится на соответствующий цвет. 0 будет серым, 1 будет зеленым> 1 будет красным. Одна вещь, которую я не знаю, как сделать
Затем я создал UserControl для Bluetooth и затем изменил тип на ToggleTaskButton. Проект это просто библиотека классов, поэтому я не получаю словарь ресурсов:/Я пытался получить правильную работу кнопки, прежде чем я разместил ее. Извините за беспорядок.
<ata:ToggleTaskButton x:Class="AdvancedTaskAssigner.Controls.BluetoothControl"
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"
xmlns:ata="clr-namespace:AdvancedTaskAssigner.Controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Loaded="UserControl_Loaded" Click="ToggleTaskButton_Click"
ImageSource="/AdvancedTaskAssigner;component/Resources/Bluetooth.png" MyBackgroundColor="Green">
<ata:ToggleTaskButton.Resources>
<Style TargetType="{x:Type ata:ToggleTaskButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ata:ToggleTaskButton}">
<Viewbox>
<Grid>
<Border BorderBrush="#FF58595B" BorderThickness="15,15,15,15" CornerRadius="8,8,8,8" >
<Border.Background>
<RadialGradientBrush>
<GradientStop Color="#FFB2B2B2" Offset=".75"/>
<GradientStop Offset="1" Color="#FFB2B2B2" />
</RadialGradientBrush>
</Border.Background>
<Viewbox>
<Image Margin="25" Height="100" Width="100" Source="{TemplateBinding ImageSource}" />
</Viewbox>
</Border>
</Grid>
</Viewbox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ata:ToggleTaskButton.Resources>
</ata:ToggleTaskButton>
КОД ЗА
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace AdvancedTaskAssigner.Controls
{
/// <summary>
/// Interaction logic for BluetoothControl.xaml
/// </summary>
public partial class BluetoothControl : ToggleTaskButton
{
public BluetoothControl()
{
InitializeComponent();
task = new BrightnessTask();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
CheckBluetoothState();
System.Console.Beep(1000, 100);
}
private void CheckBluetoothState()
{
//bluetoothState = ((byte)task.GetState() == 0x01);
//Color c = bluetoothState ? (Color)FindResource("enabledColor") : (Color)FindResource("disabledColor");
//this.outsideColor.Color = c;
}
private BrightnessTask task;
private bool bluetoothState = false;
private void ToggleTaskButton_Click(object sender, RoutedEventArgs e)
{
if (bluetoothState) { task.PerformTaskDown(); MessageBox.Show("BOO"); System.Console.Beep(1000, 100); } //if bluetooth enabled..disable
else { task.PerformTaskUp(); System.Console.Beep(2000, 100); MessageBox.Show("BOO"); }//if bluetooth disabled..enable.
CheckBluetoothState();
}
}
}
Так что я в конечном итоге на самом деле не знаю, что я делаю. Я хочу, чтобы это WPF из-за большого количества планшетов и различных размеров экрана, с которыми я сталкиваюсь. Я думаю, что в OnLoad элемент управления должен использовать задачу Bluetooth для установки состояния. Когда состояние устанавливается, оно меняет цвет моей второй градиентной остановки на фоне границы. Пожалуйста помоги. Как установить цвет GradientStop? И когда я добавить этот элемент управления в UserControl в приложении WPF он ничего не показывает, но в моем конструкторе он показывает один из этих 3-х кнопок
@JoeKorolewicz Благодарим Вас за добавление этого тега. –
В prinitsipe может быть проще, например, с помощью 'Dependency Property' или' Visual State Manager'. Вам нужно альтернативное решение вашей проблемы? Или вы хотите делать то, что вы написали? –
@ AnatoliyNikolaev Я надеюсь на решение моей проблемы. Я до сих пор не понял, как правильно делать эту работу, но я думаю, что я становлюсь немного ближе. –