Просто потратил несколько часов, пытаясь разобраться со свойствами зависимостей (найдя много ценной информации здесь на сайте).Я написал свое первое свойство зависимости, но оно не ведет себя так, как мне бы хотелось.Кто-нибудь может взглянуть на мой код и посмотреть, может ли он / она определить, что не так?При попытке запустить приложение я получаю исключение TargetInvocationException
<Window x:Class="TextEditorMVVM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:TextEditorMVVM.ViewModel"
Title="MainWindow" Height="660" Width="621" ResizeMode="CanResize" Background="Gray">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Resources/Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
<c:TextEditorViewModel x:Key="TextEditorViewModel"></c:TextEditorViewModel>
</ResourceDictionary>
</Window.Resources>
<Border CornerRadius="10" BorderThickness="12" Background="#FF505050">
<Border.BorderBrush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="LightGray" Offset="1" />
<GradientStop Color="Gray" Offset="0" />
</LinearGradientBrush>
</Border.BorderBrush>
<StackPanel DataContext="{StaticResource TextEditorViewModel}">
<Menu Height="auto" Background="Transparent" Foreground="White">
<MenuItem Width=" auto" Height="auto" Header="_File" VerticalAlignment="Center">
<MenuItem Header="_New" Command="{Binding CreateNewTabCommand}"></MenuItem>
<MenuItem Header="_Open" Command="{Binding OpenFileCommand}"></MenuItem>
<MenuItem Header="_Save" Command="{Binding SaveFileCommand}"></MenuItem>
<MenuItem Header="_Close" Command="{Binding CloseTabCommand}"></MenuItem>
<MenuItem Header="_Print" Command="{Binding PrintCommand}"></MenuItem>
<MenuItem Header="_Exit" Command="{Binding }"></MenuItem>
</MenuItem>
<MenuItem Width=" auto" Height="auto" Header="_Edit" VerticalAlignment="Center">
<MenuItem Header="_Cut" Command="ApplicationCommands.Cut"></MenuItem>
<MenuItem Header="_Copy" Command="ApplicationCommands.Copy"></MenuItem>
<MenuItem Header="_Paste" Command="ApplicationCommands.Paste"></MenuItem>
</MenuItem>
<MenuItem Width=" auto" Height="auto" Header="_Help" VerticalAlignment="Center">
<MenuItem Header="_Call Mikael" Command="{Binding }"></MenuItem>
<MenuItem Header="_Call Semyon" Command="{Binding }"></MenuItem>
<MenuItem Header="_Cry" Command="{Binding }"></MenuItem>
</MenuItem>
<Expander Header="Autosave" VerticalAlignment="Center" Foreground="White">
<StackPanel Orientation="Horizontal">
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsChecked, Mode=TwoWay}"></CheckBox>
<TextBox Width="40" Height="20" Margin="4" ></TextBox>
<Label VerticalAlignment="Center" Foreground="White">seconds</Label>
</StackPanel>
</Expander>
</Menu>
<c:TransparentTb IsTransparent="False" Text="Why aren't you working????">
</c:TransparentTb>
<TabControl x:Name="_tabControl" ItemsSource="{Binding TestTab}" SelectedItem="{Binding SelectedTab}" Background="Transparent" BorderThickness="0">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Title}"/>
<Setter Property="Style" Value="Transparent"/>
<Setter Property="Content" Value="{Binding InputText}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
</StackPanel>
</Border>
class TransparentTb : TextBlock
{
static TransparentTb()
{
}
{
get { return (bool) GetValue(IsTranparentProperty); }
set { SetValue(IsTranparentProperty, value); }
}
// Using a DependencyProperty as the backing store for IsTranparent. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsTranparentProperty =
DependencyProperty.Register("IsTransparent", typeof (bool), typeof (TransparentTb),
new UIPropertyMetadata(false, TransparentTb.IsTransparentPropertyChanged,
TransparentTb.IsTransparentCoerce, false));
private static void IsTransparentPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TransparentTb inst = (TransparentTb) d;
if ((bool)e.NewValue == true)
{
inst.Background = Brushes.Transparent;
}
else inst.Background = Brushes.Black;
}
private static object IsTransparentCoerce(DependencyObject d, object value)
{
return value;
}
}