Шаблон ошибки не отображается для элементов управления на странице
У меня есть текстовое поле на странице, которое привязывается к проверенному свойству модели, и при возникновении ошибки шаблон ошибки не отображается!
Несколько моментов:
- У меня нет проблем с проверкой элементов управления в их собственном окне (не на странице, отображаемой во фрейме в окне).
- Шаблон ошибки работает, он отображается для элементов управления в окне.
- Модель проверяется, потому что кнопка "Сохранить" на странице отключена при обнаружении ошибки проверки.
Я "думаю", что проблема заключается в том факте, что элемент управления находится внутри страницы, которая размещена внутри фрейма, и, таким образом, контекст данных не передается на страницу, так как он выглядит изолированным. Может ли это быть так? и если да, то как мне решить эту проблему? и если нет, то что еще это может быть?
Код (я, конечно, упростил код, чтобы изолировать проблему):
<Page x:Class="PIRS_Client.View.Staff.StaffDetailsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.ignore.com"
mc:Ignorable="d ignore"
DataContext="{Binding StaffDetailsVM, Source={StaticResource Locator}}"
Height="576" Width="1163">
<Grid>
<TextBox HorizontalAlignment="Left" Text="{Binding Model.title, ValidatesOnDataErrors=True}" Height="17" Margin="284,453,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="90"/>
<Button Content="Save Changes" Command="{Binding SaveDetailsCommand}" IsEnabled="{Binding Model.IsValid}" HorizontalAlignment="Left" Margin="1007,518,0,0" VerticalAlignment="Top" Width="104" Height="23"/>
</Grid>
Если я могу добавить дополнительную информацию или код, пожалуйста, дайте мне знать!
1 ответ
Проблема решена - выясняется, что в Windows есть встроенный рекламный слой, а в Pages нет, я хотел бы дать вам подробное объяснение, почему нет, но я не знаю, почему (см. Ниже). Но решение состоит в том, что вам нужно обернуть содержимое вашей страницы в декораторе рекламного устройства, чтобы предоставить им слой рекламного объявления.
Просто чтобы быть ясно, вот "фиксированный" код:
<Page x:Class="PIRS_Client.View.Staff.StaffDetailsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.ignore.com"
mc:Ignorable="d ignore"
DataContext="{Binding StaffDetailsVM, Source={StaticResource Locator}}"
Height="576" Width="1163">
<AdornerDecorator>
<Grid>
<TextBox HorizontalAlignment="Left" Text="{Binding Model.title, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Height="17" Margin="284,453,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="90"/>
<Button Content="Save Changes" Command="{Binding SaveDetailsCommand}" IsEnabled="{Binding Model.IsValid}" HorizontalAlignment="Left" Margin="1007,518,0,0" VerticalAlignment="Top" Width="104" Height="23"/>
</Grid>
</AdornerDecorator>
Если вы знаете, почему страницы не поддерживают слой рекламного объявления и могут дать более проницательный ответ, пожалуйста, не стесняйтесь добавлять объяснение в качестве другого ответа, содержащего решение, т.е. это и объяснение, и я изменю ваш ответ на правильный ответ (вместо моего) - просто для обмена знаниями;)