Я использовал метод, указанный @GhostCat, но он заставил меня полностью изменить код. Это мой новый код
public static Object[] Divisi(int[] array, int target){
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i<array.length; i++){
if (array[i] % target == 0){
answer.add(array[i]);
}
}
return answer.toArray();
}
Это дало мне желаемый ответ, но как еще я могу сделать это без преобразования в объект
Я бы попытался применить эффект затемнения с прямоугольником, заполняющим всю сетку, серым, с непрозрачностью меньше 1 и z-index выше, чем у обычных элементов управления. По умолчанию прямоугольник имел бы видимость = свернутый, тогда я бы использовал триггер, чтобы установить его видимость как видимую, когда какое-либо подходящее свойство «IsEnabled» переходит в «истину».
Вы можете просто удалить onclick, изменить цвет и сделать это состояние «отключено».
Вы можете создать для него свой собственный шаблон управления.
Я бы посоветовал использовать Blend (вы можете получить пробную версию, если у вас нет лицензии), чтобы создать копию шаблон, который вы сейчас используете.
Если вы исследуете текущий шаблон, он должен где-то устанавливать цвет фона для отключения. Ищите триггер на основе свойства IsEnabled.
Загляните в VisualBrush. Вы можете установить визуальный элемент VisualBrush для элемента управления, и VisualBrush воссоздает визуальное представление элемента управления без каких-либо фактических функций.
Я взял этот пример из книги Sells / Griffiths «Programming WPF» (глава 13 о графике) и немного изменил его, а затем еще немного, чтобы продемонстрировать вам решение.
При этом создается простой интерфейс рисования (вводятся координаты x и y двух точек, чтобы провести линию между ними), но также отражается изображение ниже. Он вовсе не должен быть надежным, но он должен продемонстрировать функциональность, которую, я думаю, вы ищете.
Последние 2 элемента прямоугольника с VisualBrush и SolidColorBrush - это то, как я создаю дублированный элемент управления, а затем затеняю его.
Что вы можете сделать, так это наложить эти 2 элемента на страницу / окно и т. Д., Которые вы хотите затенить, а затем сделать их видимыми, когда вы хотите, чтобы эффект имел место.
Надеюсь, это поможет.
<Window x:Class="GraphicsTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<Grid x:Name="mainUI">
<DockPanel>
<GroupBox Header="Point 1" Name="gbPoint1" DockPanel.Dock="Top">
<StackPanel Orientation="Horizontal">
<Label Width="40" HorizontalContentAlignment="Right">X:</Label>
<TextBox Name="tbX1" Width="40" TextChanged="Content_TextChanged"/>
<Label Width="40" HorizontalContentAlignment="Right">Y:</Label>
<TextBox Name="tbY1" Width="40" TextChanged="Content_TextChanged"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Point 2" Name="gbPoint2" DockPanel.Dock="Top">
<StackPanel Orientation="Horizontal">
<Label Width="40" HorizontalContentAlignment="Right">X:</Label>
<TextBox Name="tbX2" Width="40" TextChanged="Content_TextChanged"/>
<Label Width="40" HorizontalContentAlignment="Right">Y:</Label>
<TextBox Name="tbY2" Width="40" TextChanged="Content_TextChanged"/>
</StackPanel>
</GroupBox>
<Canvas>
<Line Name="lnDraw" Stroke="Black" StrokeThickness="2"/>
</Canvas>
</DockPanel>
</Grid>
<Rectangle Grid.Row="1">
<Rectangle.LayoutTransform>
<ScaleTransform ScaleY="-1"/>
</Rectangle.LayoutTransform>
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=mainUI}" />
</Rectangle.Fill>
</Rectangle>
<Rectangle Grid.Row="1">
<Rectangle.Fill>
<SolidColorBrush Color="Black" Opacity=".5"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
И .cs
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Content_TextChanged(object sender, TextChangedEventArgs e)
{
int x1;
int x2;
int y1;
int y2;
if (int.TryParse(tbX1.Text, out x1) && int.TryParse(tbX2.Text, out x2) && int.TryParse(tbY1.Text, out y1) && int.TryParse(tbY2.Text, out y2))
{
lnDraw.X1 = x1;
lnDraw.X2 = x2;
lnDraw.Y1 = y1;
lnDraw.Y2 = y2;
}
}
}